查询函数
函数名 | 功能 | 返回值 | 说明 |
---|---|---|---|
get | 返回表中满足条件的一条且只能有一条数据。 | 返回值是一个模型类对象。 | 参数中写查询条件。 1. 如果查到多条数据,则抛异常MultipleObjectsReturned。 2.查询不到数据,则抛异常: DoesNotExist。 |
all | 返回模型类对应表格中的所有数据。 | 返回值是QuerySet类型 | 查询集 |
filter | 返回满足条件的数据。 | 返回值是QuerySet类型 | 参数写查询条件。 |
exclude | 返回不满足条件的数据。 | 返回值是QuerySet类型 | 参数写查询条件。 |
order_by | 对查询结果进行排序。 | 返回值是QuerySet类型 | 参数中写根据哪些字段进行排序。 |
注:对于QuerySet类型,可以继续使用以上函数。
exclude
order_by
- 按照 id 升序排序
- 按照 id 降序排序
- id>3,按阅读量降序排序
条件查询
- 条件格式:
模型类属性名__条件名=值
- 数据表数据
判等 条件名: exact
模糊查询
- 包含
contains
- 以什么结尾
endswith
- 以什么结尾
startswith
空查询 isnull
范围查询 in
比较查询 gt、lt、gte大于等于、lte小于等于
日期查询 year、month、day
日期大于
F对象
- 作用:用于类属性之间的比较
- 使用之前需要导入:
from django.db.models import F
- 查询阅读量大于评论量
BookInfo.objects.filter(bread__gt=F('bcomment'))
- 查询阅读量大于2倍评论量图书信息
BookInfo.objects.filter(bread__gt=F('bcomment')*2)
Q对象
- 作用:用于查询时条件之间的逻辑关系。not and or,可以对Q对象进行 & | ~ 操作。
- 使用之前需要:
from django.db.models import Q
- 查询 id 小于3且阅读量大于30
BookInfo.objects.filter(id__lt=3,bread__gt=30)
- 查询 id 小于3或者阅读量大于30
from django.db.models import Q BookInfo.objects.filter(Q(id__lt=3)|Q(bread__gt=30))
- 查询 id 不等于 3
BookInfo.objects.filter(~Q(id=3))
聚合函数
- 作用:对查询结果进行聚合操作(sum、count、avg、max、min)
aggregate:调用这个函数来使用聚合。 - 聚合之后的 key:
字段__聚合函数名称
- 使用前需要先导入聚合类
from django.db.models import Sum,Count,Max,Min,Avg
- 查询所有书的数据目(直接写
*
会报错)from django.db.models import Count BookInfo.objects.all().aggregate(Count('id'))
- 查询所有图书阅读量的总和
from django.db.models import Sum BookInfo.objects.all().aggregate(Sum('bread'))
count函数 返回值是一个数字
- 作用:统计满足条件数据的数目
- 统计所有图书数目
BookInfo.objects.all().count()
- 统计 id 大于 3 所有图书数目
BookInfo.objects.filter(id__gt=3).count()
查询集
- all、filter、exclude、order_by调用这些函数会产生一个查询集;
QuerySet类对象可以继续调用所有函数 - 查询集特征
- 惰性查询:只有在实际使用查询集中的数据的时候才会发生对数据库真正的查询。
- 缓存:当使用的是同一个查询集时,第一次的时候会发生实际数据库的查询,然后把结果缓存起来,之后再使用这个数据集时,使用的事缓存中的结果。
- 限制查询集:可以对一个查询集取下标或者切片操作来限制查询集的结果。
对一个查询集进行切片操作会产生一个新的查询集,下标不允许为负数。
取出查询集第一条数据的两种方式:
方式 | 说明 |
---|---|
b[0] | 如果b[0]不存在,会抛出IndexError 异常 |
b[0:1].get() | 如果b[0:1].get()不存在,会抛出DoesNotExist 异常。 |
exists:判断一个查询集中是否有数据。True False