###########基于双下划线的跨表查询(基于join实现的)#############
key: 正向查询按字段,反向查询按表名小写
1.查询python这本书出版社的名字
ret = Book.objects.filter(title="python").values("publish__name")
print(ret)
ret = Publish.objects.filter(book__title="python").values("name")
print(ret)
2 查询苹果出版社出版的所有的书籍的名称
ret = Publish.objects.filter(name="苹果出版社").values("book__title")
print(ret)
ret = Book.objects.filter(publish__name="苹果出版社").values("title")
print(ret)
3 查询python这本书籍的作者的年龄
ret = Book.objects.filter(title="python").values("authors__age")
print(ret)
ret = Author.objects.filter(book__title="python").values("age")
print(ret)
4 查询alex出版过的所有的书籍名称
ret = Author.objects.filter(name="alex").values("book__title")
print(ret)
ret = Book.objects.filter(authors__name="alex").values("title")
print(ret)
5 查询alex的手机号
ret = Author.objects.filter(name="alex").values("ad__tel")
print(ret)
ret = AuthorDetail.objects.filter(author__name="alex").values("tel")
print(ret)
6 查询手机号为123的作者的名字
ret = AuthorDetail.objects.filter(tel=123).values("author__name")
print(ret)
ret = Author.objects.filter(ad__tel=123).values("name")
print(ret)
########## 连续跨表 ###############
查询苹果出版社出版过的所有书籍的名字以及作者的姓名
ret = Publish.objects.filter(name="苹果出版社").values("book__title","book__authors__name")
print(ret)
ret = Book.objects.filter(publish__name="苹果出版社").values("title","authors__name")
print(ret)
手机号以123开头的作者出版过的所有书籍名称以及出版社名称
ret = AuthorDetail.objects.filter(tel__startswith=123).values("author__book__title","author__book__authors__name")
print(ret)
ret = Author.objects.filter(ad__tel__startswith=123).values("book__title","book__publish__name")
print(ret)
############### 聚合 分组 ################
查询所有书籍的平均价格
ret = Book.objects.aggregate(ang_price=Avg("price"))
print(ret)
查询所有书籍的个数
ret = Book.objects.aggregate(c=Count(1))
print(ret)
分组
单表分组查询
查询书籍表每一个出版社id以及对应的书籍个数
key: annotate()前values哪一个字段就按哪一个字段group by
ret = Book.objects.annotate(c=Count(1)).values("publish__nid","c")
print(ret)
查询每一个部门的名称以及对应员工的平均薪水
ret = Emp.objects.values("dep").annotate(avg_salary=Avg("salary"))
print(ret)
查询每一个省份的名称以及对应的员工最大年龄
ret = Emp.objects.values("pro").annotate(max_age=Max("age"))
print(ret)
###单表按主键分组没有意义
跨表分组查询
查询每一个出版社的名称以及对应的书籍平均价格
ret = Publish.objects.annotate(avg_price=Avg("book__price")).values("name","avg_price")
print(ret)
查询每一个作者的名字以及出版的书籍的最高价格
ret = Author.objects.annotate(max_price=Max("book__price")).values("name","max_price")
print(ret)
查询每一个书籍的名称以及对应的作者的个数
ret = Book.objects.annotate(c=Count("authors__pk")).values("title","c")
print(ret)
4 查询作者数不止一个的书籍名称以及作者个数
ret = Book.objects.annotate(c=Count("authors__pk")).filter(c__gt=1).values("title","c")
print(ret)
5 根据一本图书作者数量的多少对查询集 QuerySet进行排序
ret = Book.objects.annotate(c=Count("authors__pk")).order_by("c")
print(ret)
6 统计每一本以py开头的书籍的名称以及作者个数
ret = Book.objects.filter(title__startswith="py").annotate(c=Count("authors__pk")).values("title","c")
print(ret)
############### F 与 Q ################
查询评论数大于100的所有的书籍名称
ret = Book.objects.filter(comment_count__gt=100).values("title")
print(ret)
查询评论数大于2倍点赞数的所有的书籍名称
ret = Book.objects.filter(comment_count__gt=F("poll_count")*2)
print(ret)
给每一本书籍的价格提升100
Book.objects.update(price=F("price")+100)
查询价格大于300或者评论数大于3000的书籍
ret = Book.objects.filter(Q(price__gt=300)|Q(comment_count__gt=3000))
print(ret)

orm多表查询基于双下划线的更多相关文章

  1. Django day08 多表操作 (三) 基于对象的跨表查询 基于双下划线的多表查询

    一: 基于对象的跨表查询 1. 一对一 正向: 反向: 2. 一对多 正向: 反向: 3.多对多 正向: 反向: 4.*****基于对象的多表查询 二: 基于双下划线的多表查询 1. 连表查询 一对一 ...

  2. django基础之day04,必知必会13条,双下划线查询,字段增删改查,对象的跨表查询,双下划线的跨表查询

    from django.test import TestCase # Create your tests here. import os import sys if __name__ == " ...

  3. Django框架之第六篇(模型层)--单表查询和必知必会13条、单表查询之双下划线、Django ORM常用字段和参数、关系字段

    单表查询 补充一个知识点:在models.py建表是 create_time = models.DateField() 关键字参数: 1.auto_now:每次操作数据,都会自动刷新当前操作的时间 2 ...

  4. (20)模型层 -ORM之msql 基于双下划线的跨表查询(一对一,一对多,多对多)

    基于对象的跨表查询是子查询 基于双下划线的查询是连表查询 PS:基于双下划线的跨表查询 正向按字段,反向按表名小写 一对一 需求:查询lqz这个人的地址# 正向查询ret = models.Autho ...

  5. Django学习——Django测试环境搭建、单表查询关键字、神奇的双下划线查询(范围查询)、图书管理系统表设计、外键字段操作、跨表查询理论、基于对象的跨表查询、基于双下划线的跨表查询

    Django测试环境搭建 ps: 1.pycharm连接数据库都需要提前下载对应的驱动 2.自带的sqlite3对日期格式数据不敏感 如果后续业务需要使用日期辅助筛选数据那么不推荐使用sqlite3 ...

  6. $Django 多表操作(增删改查,基于双下划线,对象的查询) 在Python脚本中调用Django环境

    在Python脚本中调用Django环境. import osif __name__ == '__main__': os.environ.setdefault("DJANGO_SETTING ...

  7. django orm 基于双下划线的跨表查询

    一..基于双下划线的跨表查询(join实现) key:正向查询按字段,反向查询按表明小写 1.一对多跨表查询 查询在跨表中可以有两种方式,正向查询就是关键字段在你要搜索的表,没有关键字段就是反向查询 ...

  8. $Django 模板层(模板导入,继承)、 单表*详(增删改查,基于双下划线的查询)、static之静态文件配置

    0在python脚本中使用django环境 import osif __name__ == '__main__':    os.environ.setdefault("DJANGO_SETT ...

  9. python 全栈开发,Day74(基于双下划线的跨表查询,聚合查询,分组查询,F查询,Q查询)

    昨日内容回顾 # 一对多的添加方式1(推荐) # book=Book.objects.create(title="水浒传",price=100,pub_date="164 ...

随机推荐

  1. NAT的配置

    实验的拓扑图如下所示 首先我们对路由器进行基础的地址配置 我们先在R2路由器上设置一条连接外网的静态路由 然后我们给PC1设置一个静态NAT 然后使得PC1 通过202.169.10.5 地址访问外网 ...

  2. Appium移动自动化测试-----(六)2.AppiumDesktop录制脚本生成极简脚本

    AppiumDesktop启动页面: 启动AppiumDesktop以后点击该页面右上角的Start New Session按钮,就会启动一个新的会话窗口(如下图),在这个窗口我们需要配置一些Desi ...

  3. 使用plotrix做韦恩图

    color <- c("#E41A1C","#377EB8","#FDB462") color_transparent <- a ...

  4. linux 编程 如何判断socket断开???--ongoing

    1 利用select ? 2从github上找例子 3 学习asio  c++ library

  5. shrio学习笔记

    Thymeleaf扩展坐标 <!--thyemleaf对shrio的扩展坐标--> <dependency> <groupId>com.github.thebora ...

  6. MongoDB 空间定位(点) 与 距离检索

    转自: http://blog.csdn.net/flamingsky007/article/details/39208837 基于 MongoDB 2.6 GeoJSON 格式 { "ty ...

  7. SpringBoot之分页插件PageHelper的使用

    在springboot中使用PageHelper插件有两种较为相似的方式,接下来我就将这两种方式进行总结. 方式一:使用原生的PageHelper 1.在pom.xml中引入依赖 <depend ...

  8. Mybatis笔记2

    使用Mybatis完成的CRUD操作 个人总结的一些小规律 学习过程中碰到的错误: org.apache.ibatis.exceptions.PersistenceException: ### Err ...

  9. Python15之字符串的格式语句与操作符

    一.字符串的format()函数 字符串1.format(赋值)                         字符串中必须表明需要格式化的位置 format()函数使用时,花括号中的值表明字符串中 ...

  10. Burp Suite的安装与使用

    ​ Burp Suite是一个集成化的渗透测试工具,它集合了多种渗透测试组件,使我们自动化地或手工地能更好的完成对web应用的渗透测试和攻击.在渗透测试中,我们使用Burp Suite将使得测试工作变 ...