###########基于双下划线的跨表查询(基于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. docker 安装 tomcat8

    docker hub 查找 tomcat meiya@meiya:/etc/docker$ docker search tomcat NAME DESCRIPTION STARS OFFICIAL A ...

  2. mysql 严格模式 Strict Mode

    mysql 严格模式 Strict Mode 找到MySQL安装目录下的my.cnf(windows系统则是my.ini)文件 在sql_mode中加入STRICT_TRANS_TABLES则表示开启 ...

  3. Suspended Animation——《The Economist》阅读积累(考研英语二·2010 Reading Text 1)

    [知识小百科] Damien Hirst(达米恩●赫斯特):生于1965年,是新一代英国艺术家的主要代表人物之一.他主导了90年代英国艺术发展并享有很高的国际声誉.赫斯特在1986年9月就读于伦敦大学 ...

  4. 关于启动kylin报Failed to find metadata store by url: kylin_metadata@hbase的问题解决

    一.出问题的原因 昨天因为项目需要,要将cloudera集群改成高可用,没想到失败了,当时因为冲动手动删了几个hdfs实例的原因,导致退不到原来的状态,折腾了一天,最后终于退回了非HA的集群,但是hd ...

  5. LeetCode 643. 子数组最大平均数 I(Maximum Average Subarray I)

    643. 子数组最大平均数 I 643. Maximum Average Subarray I 题目描述 给定 n 个整数,找出平均数最大且长度为 k 的连续子数组,并输出该最大平均数. LeetCo ...

  6. 关于epoll,select,poll的理解

    select: 轮询+fd_set 1.采用fd_set存储fd(fd_set通过数组位图实现) 2.每次调用select,都需要把fd集合从用户态拷贝到内核态,fd越多开销越大 3.每次调用sele ...

  7. JAVA线程中的发牌题

    发牌题主要考虑的就是线程的问题,一个buffer缓冲区的问题, 首先,发牌的优先级当然是最高的了,但是取牌不能有优先级,否则会一直有牌先取,因此需要一个信号量order,当order=线程的数字时,取 ...

  8. 写一个vue的滚动条插件

    组件源码如下: vue-scroll.vue <template> <div class="vue-scroll" ref="vueScrollW&qu ...

  9. 如何加入 Skype for Business 会议?

    参加一个线上培训,收到了Skype的参会地址,是这个样子的 然后就是一脸懵逼的不知道怎么参加会议了.找了半天终于在同事的帮助下参加成功. 我的参加方法:在Window上用Skype for Busin ...

  10. 写一个RD一般需要多久?在迭代中新增的需求如何处理?如何做好项目管理?

    最近总是有些初入行的小伙们,经常会问我一些他们在工作工作的中疑问,我今天挑选出几个比较典型的问题和大家一起来讨论下. 问题如下: 写一个PRD一般需要多久? 在迭代中新增的需求如何处理? 如何做好项目 ...