博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
django之多表查询-2
阅读量:5092 次
发布时间:2019-06-13

本文共 2157 字,大约阅读时间需要 7 分钟。

2018-11-14
一  \\  基于双下划线的跨表查询:          套路一样,用__跨表        -一对多        -多对多 from app.models import *查询出版社为北京出版社出版的所有图书的名字,价格ret=Publish.objects.filter(name='北京出版社').values('book__name','book__price') 查询红楼梦的所有作者名字 ret=Book.objects.filter(name='红楼梦').values('authors__name') 进阶练习--连续跨表 查询北京出版社出版过的所有书籍的名字以及作者的姓名 ret=Publish.objects.filter(name='北京出版社').values('book__name','book__authors__name') 二  \\  聚合查询 from django.db.models import Avg,Count,Max,Min,Sum
1.计算所有图书的平均价格 ret = Book.objects.all().aggregate(Avg('price'))    #可以省略all() print(ret) 2. 计算图书的最高价格 ret = Book.objects.aggregate(Max('price')) print(ret) 3. 计算图书的最高价格,最低价格,平均价格,总价 ret = Book.objects.aggregate(Max('price'),Min('price'),Avg('price'),Sum('price')) print(ret)
三 \\ 分组查询 终极总结:	values在前,表示group by,在后,表示取值	filter在前,表示过滤(where),在后,表示having(对分组之后的结果再进行过滤)
1.统计每一本书作者个数 ret = Book.objects.annotate(c=Count('authors')).values('name','c') print(ret) 2.统计每一个出版社的最便宜的书(以谁group by 就以谁为基表) ret = Publish.objects.annotate(m=Min('book__price')).values('name','m') print(ret) 3.统计每一本以py开头的书籍的作者个数 ret = Book.objects.filter(name__startswith='py').annotate(m=Count('authors')).values('name','m') print(ret) 4.查询各个作者出的书的总价格 ret = Author.objects.annotate(m=Sum('book__price')).values('name','m') print(ret) 5.查询名字叫lqz作者书的总价格 ret = Author.objects.filter(name='lqz').annotate(m=Sum('book__price')).values('name','m') print(ret) 6.查询所有作者写的书的总价格大于30 ret = Book.objects.annotate(s=Sum('authors__book__price')).filter(s__gt=900).values('authors__name','s') print(ret)
四  \\  F查询与Q查询
F查询 
1.查询评论数大于阅读数的书 ret = Book.objects.filter(commit_num__gt=F('read_num')) print(ret) 2.把所有书的评论数加1 ret = Book.objects.update(commit_num=F('commit_num') + 1) 3.把python这本书的阅读数减5 ret = Book.objects.update(read_num=F('read_num')-5) Q函数 为了表示与& ,或 | ,非 ~
# 1.查询作者名字是lqz或者名字是egon的书 ret = Book.objects.all().filter(Q(authors__name='zjh') | Q(authors__name='egon')).values('name') print(ret) # 2.查询作者不是zjh的书 ret = Book.objects.all().filter(~Q(authors__name='zjh')).values('name') print(ret)
 
 

 

ret = Publish.objects.filter(name='北京出版社').values('name','book__name','book__authors__name')

转载于:https://www.cnblogs.com/zhaijihai/p/9959940.html

你可能感兴趣的文章
spring 监听器
查看>>
[BZOJ 3709] Bohater
查看>>
Python 的字符编码
查看>>
项目 数据可视化5 随机漫步
查看>>
Visual Studio 2012 更新包2发布,附离线安装方法及下载
查看>>
ThinkPHP带表情无限级评论回复
查看>>
YII2 搭建redis拓展(教程)
查看>>
多继承下的super()指向的不一定是直接父类
查看>>
约瑟夫环
查看>>
MySQL的数据类型
查看>>
解决移动端 footer fixd 定位被键盘顶起来的方案
查看>>
模拟 Coder-Strike 2014 - Round 1 A. Poster
查看>>
由脚本创建的新元素事件不触发和用的easyUI插件中的多选框不起作用的解决方法...
查看>>
RabbitMQ 学习开发笔记
查看>>
Java经典算法
查看>>
ubuntu下mysql数据库存储路径修改
查看>>
软工作业PSP与单元测试训练 15100231
查看>>
php----显示中文乱码的问题
查看>>
new Image().src资源重复请求问题
查看>>
20155308 2017-2018-1 《信息安全系统设计基础》第十三周学习总结
查看>>