Django 学习笔记之四 QuerySet常用方法

时间:2024-01-17 08:18:20

  QuerySet是一个可遍历结构,它本质上是一个给定的模型的对象列表,是有序的。

  1、建立模型:

  Django 学习笔记之四 QuerySet常用方法

  2、数据文件(test.txt)

  Django 学习笔记之四 QuerySet常用方法

  3、文件数据入库(默认的sqlite3)

  入库之前执行 数据库同步命令。具体的参照:Django 学习笔记之二 基本命令 中同步数据库

  Django 学习笔记之四 QuerySet常用方法

  4、查询方法

    其中要用到values(*fields), filter(**kwargs), exclude(**kwargs)order_by(*fields)

    1、 查询Author 表中数据记录条数

     Author.objects.count()  类似 SQL:select count(*) from Author

    2、查询Author 表中数据所有数据

    Author.objects.values()  类似 SQL:select * from Author

    3、查询查询Author 表中 name,age,birth三列的数据

    Author.objects.values('name','age','sex') 类似 SQL:select name,age,sex from Author

    4、查询name='mike' 姓名,性别,年龄及出生日期等数据

    Author.objects.values('name','age','sex','birth').filter(name='mike')

    类似 SQL:select name,age,sex,birth from Author where name ='mike'

    5、查询age =40的人的姓名,性别,及出生日期信息

    Author.objects.values('name','sex','birth').filter(age=40)

    类似 SQL:select name,sex,birth from Author where age =40

    6、查询age >40、age <40和age !=40的人的姓名,性别,及出生日期信息 ,主要大于、小于、不等于分别用__gt、__lt、exclude

    Author.objects.values('name','sex','birth').filter(age__gt=40)    age >40 类似 SQL:select name,sex,birth from Author where age >40

    Author.objects.values('name','sex','birth').filter(age__lt=40)     age <40 类似 SQL:select name,sex,birth from Author where age <40

    Author.objects.values('name','sex','birth').exclude(age = 40)  age !=40 类似 SQL:select name,sex,birth from Author where age !=40

    Django 学习笔记之四 QuerySet常用方法

    出错的原因是age和__gt之间不能有空格,__gt和后面的数据可以有空格

    7、查询name !='mike' 并且age!=20的信息。

    Author.objects.values('name','age').exclude(name='mike',age=20)

    类似 SQL:select name,sex from Author where name !='mike' and age !=40

    8、查询name = 'mike' 并且age = 20的信息

    Author.objects.values('name','age').filter(name='mike',age=20)

    类似 SQL:select name,sex from Author where name ='mike' and age =40

  5、查询并排序

    1、查询name 和age 并按照age升序

    Author.objects.values('age','name').order_by('age')

    select age,name form Author order by age

    2、查询name 和age 并按照age降序

    Author.objects.values('age','name').order_by('-age')

    select age,name form Author order by age desc

     3、查询name 和age,并按照name,age升序

    Author.objects.values('age','name').order_by('name','age')

    select age,name form Author order by name, age

     4、查询name 和age,并按照name,age降序  降序,在字段前面加个-

    Author.objects.values('age','name').order_by('-name','-age')

    select age,name form Author order by name, age desc

    5、查询name 和age,并按照name升序, age降序

    Author.objects.values('age','name').order_by('name','-age')

    select age,name form Author order by name asc, age desc

    6、查询age>30的name 和age信息,并按照age升序

    Author.objects.values('age','name').filter(age__gt=30).order_by('age')

    select age,name from Author where age>40 order by age

  6、first()

    返回由查询集匹配的第一个对象,如果没有匹配对象,则返回None。 如果QuerySet没有定义顺序,则查询集自动按主键排序。

    Author.objects.first()

    Author.objects.values().first()

  7、last()

    像first()一样工作,但返回查询集中的最后一个对象。

    

    Author.objects.last()

    Author.objects.values().last()

  8、Max、Min、Avg、Sum、Count

    1、from django.db.models import Max

    Author.objects.all().aggregate(Max('age'))  结果:{'age__max': 70}

    2、from django.db.models import Min

    Author.objects.all().aggregate(Min('age'))  结果:{'age__min': 10}

    3、from django.db.models import Avg

    Author.objects.all().aggregate(Avg('age'))  结果:{'age__avg': 31.384615384615383}

    4、from django.db.models import Sum

    Author.objects.all().aggregate(Sum('age'))  结果:{'age__sum': 408}

    Author.objects.all().aggregate(total_age=Sum('age'))  结果:{'total_age': 408}

    5、from django.db.models import Count

     Author.objects.all().aggregate(Count('age'))  结果:{'age__count': 13}

     #年龄大于30的记录数

     Author.objects.all().filter(age__gt=30).aggregate(Count('age')) 结果:{'age__count': 4}