orm多表查询基于双下划线
###########基于双下划线的跨表查询(基于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多表查询基于双下划线的更多相关文章
- Django day08 多表操作 (三) 基于对象的跨表查询 基于双下划线的多表查询
一: 基于对象的跨表查询 1. 一对一 正向: 反向: 2. 一对多 正向: 反向: 3.多对多 正向: 反向: 4.*****基于对象的多表查询 二: 基于双下划线的多表查询 1. 连表查询 一对一 ...
- django基础之day04,必知必会13条,双下划线查询,字段增删改查,对象的跨表查询,双下划线的跨表查询
from django.test import TestCase # Create your tests here. import os import sys if __name__ == " ...
- Django框架之第六篇(模型层)--单表查询和必知必会13条、单表查询之双下划线、Django ORM常用字段和参数、关系字段
单表查询 补充一个知识点:在models.py建表是 create_time = models.DateField() 关键字参数: 1.auto_now:每次操作数据,都会自动刷新当前操作的时间 2 ...
- (20)模型层 -ORM之msql 基于双下划线的跨表查询(一对一,一对多,多对多)
基于对象的跨表查询是子查询 基于双下划线的查询是连表查询 PS:基于双下划线的跨表查询 正向按字段,反向按表名小写 一对一 需求:查询lqz这个人的地址# 正向查询ret = models.Autho ...
- Django学习——Django测试环境搭建、单表查询关键字、神奇的双下划线查询(范围查询)、图书管理系统表设计、外键字段操作、跨表查询理论、基于对象的跨表查询、基于双下划线的跨表查询
Django测试环境搭建 ps: 1.pycharm连接数据库都需要提前下载对应的驱动 2.自带的sqlite3对日期格式数据不敏感 如果后续业务需要使用日期辅助筛选数据那么不推荐使用sqlite3 ...
- $Django 多表操作(增删改查,基于双下划线,对象的查询) 在Python脚本中调用Django环境
在Python脚本中调用Django环境. import osif __name__ == '__main__': os.environ.setdefault("DJANGO_SETTING ...
- django orm 基于双下划线的跨表查询
一..基于双下划线的跨表查询(join实现) key:正向查询按字段,反向查询按表明小写 1.一对多跨表查询 查询在跨表中可以有两种方式,正向查询就是关键字段在你要搜索的表,没有关键字段就是反向查询 ...
- $Django 模板层(模板导入,继承)、 单表*详(增删改查,基于双下划线的查询)、static之静态文件配置
0在python脚本中使用django环境 import osif __name__ == '__main__': os.environ.setdefault("DJANGO_SETT ...
- python 全栈开发,Day74(基于双下划线的跨表查询,聚合查询,分组查询,F查询,Q查询)
昨日内容回顾 # 一对多的添加方式1(推荐) # book=Book.objects.create(title="水浒传",price=100,pub_date="164 ...
随机推荐
- windows命令行 共享文件夹
net share dpantemp2 /DELETEnet share dpantemp2=d:\temp2 /GRANT:jk,FULL /REMARK:" web api 共享&quo ...
- 如何提高程序员的键盘使用效率(搬砖工人的自我修养(tucao))
高软第一次作业 程序员使用键盘最常用的技能 搬运自:https://learnku.com/articles/22806 括号内为个人吐槽 1.尊重操作系统特性(如Mac OS的某些键位自定义设 ...
- ztree节点名称排序
// result 为后台返回的集合,在渲染tree前的数据 result = result.sort(function (a, b) { // 判断前面一个是字母,后面一个不是字母,那么不换位置,返 ...
- RestTemplate对象的使用
- 【坑】关于springMvc对JSON日期绑定,得到的日期后面多个时间的问题
文章目录 前言 Mysql的Date() 后记 前言 当我们翻过 解决springMvc对JSON日期绑定 眼前这座大山以后,发现并没有 IG 的荣光在等着我们,反而有个大坑在等着我们.... 比如博 ...
- Python06之分支和循环1(三目运算符)
Python 为了使得程序更加简洁而新引入过来的一个三目操作符,顾名思义就是有三个参数. 格式: x if 条件表达式 else y 先判断条件表达式真假,真则取 x 的值,否则取 y 的值. 例如: ...
- 14 windows下安装pygame模块
pycharm安装-推荐 file->setting->project->project interpreter->右边的+号,搜索pygame,点击下方的install pa ...
- AVR单片机教程——烧写hex文件
每一次build项目,编译器都会生成多个文件,其中有一个就是hex文件.之前在IDE中配置的external tools,就是把这个hex文件烧写到单片机中去的. 然而,有些时候你想运行别人的程序,但 ...
- Vue $emit $event 传值(子to父)
事件名 始终使用 kebab-case 的事件名. 通过事件向父组件发送信息 子组件中EnFontsize.vue中$emit <button @click="$emit('enlar ...
- 在论坛中出现的比较难的sql问题:28(循环查询表来实现递归)
原文:在论坛中出现的比较难的sql问题:28(循环查询表来实现递归) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. 所以,觉得有必 ...