1. 聚合函数
使用 aggregate()过滤器调用聚合函数
聚合函数包括 :
Avg 平均
Count 数量
Max 最大
Min 最小
Sum 求和
被定义在django.db.models中。
注意aggregate的返回值是一个字典类型
{'属性名__聚合类小写':值}
使用前导包
from django.db.models import Sum
#查询图书的总阅读量
BookInfo.objects.aggregate(Max('bread'))
使用count时一般不使用aggregate()过滤器
查询图书总数
BookInfo.objects.count()
2. 排序
使用order_by对结果进行排序# 升序
BookInfo.objects.all().order_by('bread')
#降序
BookInfo.objects.all().order_by('-bread')
3.关联查询
由一到多的访问语法:
一对应的模型类对象.多对应的模型类名小写_set
b =BookInfo.objects.get(id=1)
b.heroinfo_set.all()
由多到一的访问语法:
多对应的模型类对象.多对应的模型类中的关系类属性名
h =HeroInfo.objects.get(id=1)
h.hbook
4.查询集 QuerySet
exists():判断查询集中是否有数据,如果有则返回True,没有则返回False
两大特性1.惰性执行
2.缓存
惰性执行
创建查询集不会访问数据库,直到调用数据时,才会访问数据库,调用数据的情况包括迭代、序列化、与if合用
例如,当执行如下语句时,并未进行数据库查询,只是创建了一个查询集qs
qs = BookInfo.objects.all()
for book in qs:
print(book.btitle)
缓存
使用同一个查询集,第一次使用时会发生数据库的查询,然后Django会把结果缓存下来
,再次使用这个查询集时会使用缓存的数据,减少了数据库的查询次数
情况一:
如下是两个查询集,无法重用缓存,每次查询都会与数据库进行一次交互,增加了数据库的负载
from booktest.models import BookInfo
[book.id for book in BookInfo.objects.all()]
[book.id for book in BookInfo.objects.all()]
情况二:
使用同一个查询集,第一次使用时会发生数据库的查询,然后Django会把结果缓存下来,
再次使用这个查询集时会使用缓存的数据,减少了数据库的查询次数
经过存储后,可以重用查询集,第二次使用缓存中的数据
qs =BookInfo.objects.all()
[book.id for book in qs]
[book.id for book in qs]