今日内容概要
聚合查询
常见的聚合函数
函数关键字 | 函数作用 |
---|---|
Max | 最大值 |
Min | 最小值 |
Sum | 求和 |
Count | 统计 |
Avg | 平均值 |
用法
#用之前需要导入
from django.db.models import Max,Min,Sum,count,Avg
#获取书中价格最高的
res = models.Book.objects.aggregate(Max('price'))
print(res)
res = models.Book.objects.aggreate(Max_price=Max('price')).get('max_prince')
'''还支持取别名 然后在get 如果不起别名 dango会自动起一个'''
#书的价格最低的
res = models.Book.objects.aggregate(Min('price'))
print(res)
#全部书的总价格
res = models.Book.objects.aggregate(Sum('price'))
print(res)
#统计书本的个数
res = models.Book.objects.aggregate(Count('pk'))
print(res)
#查询书本的平均价格
res = models.Book.objects.aggregate(Aug('price'))
print(res)
查询结果
分组查询
'''
如果执行ORM分组查询报错 并且有关键字sql_mode stric mode
移除sql_mode 中的严格模式 only_full_group_by
'''
from django.db.models import Count, Sum, Max, Min, Aug
# 统计每本书的作者个数
'''
在Mysql中需要连表 然后在分组再统计作者个数
'''
1.先按照作者的表去分组(针对不同的要求 做不同的分组处理)
res = models.Book.objects.annotate(a_c=Count('authors_pk')).values('name','a_c')
print(res)
2.再按照表中字段分组
res = models.Book.objexcts.values('name').annotate(a_c=Count('authors_pk')).values('name','a_c')
print(res)
查询结果
新增字段
#针对已有数据之中还要插入字段必须给字段默认值 或者设置字段可为空
F与Q查询
F查询
from django.db.models import F
#查询库存大于卖出的书籍
'''
当条件不是明确的 也需要从数据库中获取 就可以使用F查询
'''
res = models.Book.object.filter(kucun_gt = F('maichu').values('name')
print(res)
#将书的价格都提高100
models.Book.objects.update(price = F('price') + 100)
#将所有书的名称后面追加新款
from dango.db.models.fybctions import Concat
from dango.db.models import Value
models.Book.object.update(name=Concat(F('name',Value('新款'))))
res = models.Book.objects.all().values('name')
print(res)
Q查询
# 查询主键是 1 且价格大于2000的书籍
'''
当条件与条件之间的关系 不是and 的时候就需要Q查询
'''
from django.db.models import Q
res = models.Book.object.filter(Q(pk=1),Q(price_gt=2000)).values('name')
print(res)
'''默认也是或关系'''
#查询主键是1 或者价格大于2000的书籍
res = models.Book.object.filter(Q(pk=1) | Q(prince_gt=2000).values('name'))
print(res)
'''|管道符为或符号'''
#查询主键不是1 或者价格大于2000的书籍
res = models.Book.object.filter(~Q(pk=1) | Q(price_gy=2000).values('name'))
print(res)
'''~是取反符号'''
标签:聚合,name,models,res,查询,Book,分组,print
From: https://www.cnblogs.com/xiaochenxiangchangpang/p/16989356.html