005--Django(聚合函数和关联查询)

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]
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值