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')

最新文章

  1. CSS 两列布局 之 左侧适应,右侧固定 3种方式
  2. Atititi.名字 姓名 name 起名naming spec 的构成结构规范v2 qc2.docx
  3. cvLoadImage
  4. POJ 2251 Dungeon Master(广搜,三维,简单)
  5. winPcap_5_打开适配器并捕获数据包
  6. JavaScript 变量类型 保存内存中的位置 和 引用
  7. ASP.NET - 编写让别人能读懂的代码
  8. linux expect自动登陆远程服务器 批量管理服务器
  9. 复制粘贴之不带插件的jquery
  10. 使用GDAL进行RPC坐标转换
  11. Java发送邮件 —— SpringBoot集成Java Mail
  12. jQuery效果之雪花飘落
  13. jQuery中获取a标签的值
  14. 文件内容比较difflib
  15. JS window对象的top、parent、opener含义介绍
  16. Android-TabLayout设置内容宽度以及下划线宽度
  17. Intro to Python for Data Science Learning 2 - List
  18. Spring restTemplate
  19. P1314 聪明的质监员(前缀和+二分)
  20. 基于Oracle的SQL优化(崔华著)-整理笔记-第2章“Oracle里的执行计划”

热门文章

  1. Tool bar
  2. Linq Mysql GroupBy语句的问题处理
  3. Xcode 调试方法总结
  4. Visual Studio 2017 RC使用初体验
  5. 简单的SpringCloud 熔断Hystrix
  6. 图像处理之拼接---图像拼接opencv
  7. Spring MVC学习-----------springMVC-mvc.xml
  8. 修改一些IntelliJ IDEA 11的设置,使Eclipse的使用者更容易上手(转)
  9. VC++Debug避免F11步进不想要的函数中
  10. PostgreSql Partition + Hibernate Insert