目录
djangoday06
一、图书馆里系统讲解
1.表的设计
2.首页展示
3.书籍查询
3.书籍添加
3.书籍编辑
3.书籍删除
具体逻辑代码后面会挂在底部
二、聚合查询
聚合函数:Max Min Sun Count Avg
在ORM中支持单独使用聚合函数 用关键字:aggregate
from django.db.models import Max, Min, Sum, Avg, Count
res = models.Book.objects.aggregate(Max('price'), Min('price'), Sum('price'), Avg('price'), Count('pk'))
print(res)
三、分组查询
# 温馨提示来袭哟!
如果执行ORM分组查询报错 并且有关键字sql_mode strict mode
移除sql_mode中的only_full_group_by 即可! 代码如下
set global sql_mode='stric_trans_tables';
1.统计每一本书的作者个数
res = models.Book.objects.annotate(author_num=Count('authors_pk')).values('title', 'author_num')
print(res)
2.统计出每个出版社卖出的最便宜的书的价格
res = models.Publish.objects.annotate(min_price=Min('book_price')).values('name', 'min_price')
print(res)
3.统计不止一个作者的书
# 1.先统计每本书作者个数
res = models.Book.objects.annotate(author_num=Count('author_pk'))
# 2.再从中筛选作者个数大于1的数据
res.filter(author_num_gt=1).values('title', 'author_num')
3.查询每个作者的书总价格
res = models.Author.objects.annotate(totalprice=Sum('book__price'),count_book=Count('book_pk')).values('name','totalprice','count_book')
print(res)
# 按照表名分组
models.表名.objects.annotate()
# 按照values括号内指定的字段分组
models.表名.objects.values('字段名').annotate()
res = models.Book.objects.values('publish_id').annotate(count_pk=Count('pk')).values('publish_id','count_pk')
print(res)
四、F与Q查询
1.什么是F查询?
F查询:同一张表格的不同字段之间的查询
当查询条件不是明确的 也需要从数据库中获取 就需要使用F查询
2.什么是Q查询?
Q查询:需要复杂的逻辑关系的时候使用Q查询
逗号默认是and,处理不了or not 这样的更复杂查询条件 这时Q查询用上排场了
| 表示取或or
& 表示取且and
~ 表示取反not
1.查询库存数量大于卖出的书籍数量
from django.db.models import F
res = models.Book.objects.filter(stock__gt=F('sold'))
print(res)
2.将所有书的价格涨800
from django.db.models import F
models.Book.objects.update(price=F(price) + 800)
3.将所有书的名称后面追加爆款
from django.db.models import F
from django.db.models.functions import Concat
from django.db.models import Value
models.Book.objects.update(title=Concat(F('title'),Value('爆款')))
4.查询主键是1或者大于2000的书籍
from django.db.models import Q
res = models.Book.objects.filter(Q(pk=1) | Q(price__gt=2000))
标签:Book,聚合,models,res,price,查询,objects,分组
From: https://www.cnblogs.com/almira998/p/16987810.html