聚合查询 分组查询 F与Q查询

今日内容概要

聚合查询

常见的聚合函数

函数关键字 函数作用
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)

查询结果

img

分组查询

'''
如果执行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)

查询结果

img

新增字段

#针对已有数据之中还要插入字段必须给字段默认值 或者设置字段可为空

image

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)

img

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)
'''~是取反符号'''
posted @ 2022-12-17 18:55  早点早点灬  阅读(82)  评论(0)    收藏  举报