django ORM 连表查询2
set()
更新model对象的关联对象
book_obj=models.Book.objects.first()
book_obj.authors.set([2,3])
把book_obj这个对象重新设置关联对象为作者id为2,3的对象
remove()
从关联对象中移除被执行的对象
book_obj=models.Book.objects.first()
book_obj.authors.remove(3)
移除这个对象关联的id为3的作者
clear()
从关联对象集中移除一切对象。
book_obj=models.Book.objects.first()
book_obj.authors.clear()
注意:对于ForeignKey对象
clear()和remove()方法仅在null=True时才存在
class Book(models.Model)
name = models.CharField(max_length=32)
publisher=models.ForeignKey(to class.null=True)
聚合查询:
aggregate()是QuerySet的一个终止字句,它返回一个包含一些键值对的字典。from django.db.models import Avg, Sum, Max, Min, Countmodels.Book.objects.all().aggregate(Avg("price"))
是django内置的函数,返回的字典,可以指定key
models.Book.objects.aggregate(average_price=Avg('price'))
它的key就是average_price
也可以一次查询多个
models.Book.objects.all().aggregate(Avg("price"), Max("price"), Min("price")
结果为:
{'price__avg': 13.233333, 'price__max': Decimal('19.90'), 'price__min': Decimal('9.90')}
分组:
sql查询:
select dept.name,AVG(salary) from employee inner join dept on (employee.dept_id=dept.id) group by dept_id;
orm查询:
models,Dept.objects.annotate(avg=Avg(''employee__salary'')).values(''name'',''avg'')
更多实例:
统计每一本书的作者个数:
book_list=models.Book.objects.all().annotate(auhor_num=Count("author"))
for obj in book_list:
print(obj.author_num)
找出每个出版社买的最便宜的书的价格
publisher_list=models.Publisher.objects.annotate(min_price=Min(''book_price''))
方法2:
models.Book.objects.values(''publisher__name'').annotate(min_price=Min(''price''))
统计不止一个作者的图书
models.Book.objects.annotate(author_num=Count(''author'')).filter(author_num__gt=1))
根据一本图示作者数量的多少对查询集QuerySet进行排序
models.Book.objects.annotate(author_num=Count(''author'')).order_by(author_num)
查询各个作者出的书的总价格
models.Author.objects.annotate(sum_price=Sum(''book__price'')).value(''name'',''sum_price'')
django ORM 连表查询2的更多相关文章
- Django ORM多表查询练习
ORM多表查询 创建表结构: from django.db import models # 创建表结构 # Create your models here. class Class_grade(mod ...
- Django ORM多表查询
基于双下划线查询 根据存的时候,字段的数据格式衍生的查询方法 1.年龄大于35岁 res = models.AuthorDetails.objects.filter(age__lt=80) print ...
- django ORM 连表查询
db_index=True 如果设置该字段就可以设置索引 auto_now_add 代表设置创建时候的时间 auto_now 每次更新数据记录时会更新该字段 to_field 设置要关联表的字 ...
- Django ORM单表查询必会13条
必知必会13条 操作下面的操作之前,我们实现创建好了数据表,这里主要演示下面的操作,不再细讲创建准备过程 <1> all(): 查询所有结果 <2> filter(**kwar ...
- django orm跨表查询废话最少最精简版
在model.py中: class B1(models.Model): u1= models.CharField(max_length=32) #多 class B2(models.Model): f ...
- python 之 Django框架(orm单表查询、orm多表查询、聚合查询、分组查询、F查询、 Q查询、事务、Django ORM执行原生SQL)
12.329 orm单表查询 import os if __name__ == '__main__': # 指定当前py脚本需要加载的Django项目配置信息 os.environ.setdefaul ...
- 第五章、Django之多表查询进阶与事务
目录 第五章.Django之多表查询 一.聚合查询 二.分组查询 三.F与Q查询 四.查询优化 五.Django开启事务 六.自定义char字段 七.ORM常用字段 第五章.Django之多表查询 一 ...
- 第十七篇 ORM跨表查询和分组查询---二次剖析
ORM跨表查询和分组查询---二次剖析 阅读目录(Content) 创建表(建立模型) 基于对象的跨表查询 一对多查询(Publish与Book) 多对多查询 (Author 与 Book) 一对一查 ...
- ORM单表查询,跨表查询,分组查询
ORM单表查询,跨表查询,分组查询 单表查询之下划线 models.Tb1.objects.filter(id__lt=10, id__gt=1) # 获取id大于1 且 小于10的值models ...
随机推荐
- cf688B-Lovely Palindromes
http://codeforces.com/problemset/problem/688/B B. Lovely Palindromes time limit per test 1 second me ...
- [poj2976]Dropping tests(01分数规划,转化为二分解决或Dinkelbach算法)
题意:有n场考试,给出每场答对的题数a和这场一共有几道题b,求去掉k场考试后,公式.的最大值 解题关键:01分数规划,double类型二分的写法(poj崩溃,未提交) 或者r-l<=1e-3(右 ...
- C++实现筛选法
筛选法 介绍: 筛选法又称筛法,是求不超过自然数N(N>1)的所有质数的一种方法.据说是古希腊的埃拉托斯特尼(Eratosthenes,约公元前274-194年)发明的,又称埃拉托斯特尼筛子. ...
- js 操作属性,操作内容,
disable=“disable” 让按钮变得不可选 先建一个按钮,让class = ’btn‘ 然后, 添加,修改属性 document.getElementsByClassName('btn')[ ...
- BMP是可以保存alpha通道的。
一直以来都不太熟悉BMP格式,今天保存图片的时候发现bmp是可以保存透明通道的,突然想起来以前下载的一些游戏素材贴图里面就有一些bmp格式的贴图.记录一下.
- Luogu 2114 [NOI2014]起床困难综合症
还挺简单的. 发现这几个二进制运算并不会进位,所以我们从高到低按位贪心,一位一位计算贡献. 发现$2^{30}$刚好大于$1e9$,所以最多只要算29位. 首先算出一个全都是$0$的二进制数和一个全都 ...
- 多线程学习-基础(五)sleep()和yield()的区别(理论)
一.sleep()和yield()的区别 (1)sleep()使当前线程进入停滞状态(即阻塞状态),所以执行sleep()的线程在指定的时间内不会被执行: (2)yield()只是使当前线程从运行状态 ...
- 20169219《linux内核原理与分析》第九周作业
网易云课堂学习 可执行程序的装载 可执行程序的产生过程:预处理-----> 编译 ----> 汇编 ----> 链接 以hello.c文件为例进行分析,编译步骤如下 vi hello ...
- [坑]Linux MySQL环境表名默认区分大小写
不区分大小写设置 1.用ROOT登录,修改/etc/my.cnf 2.在[mysqld]下加入一行:lower_case_table_names=1 3.重新启动数据库即可 systemctl res ...
- 1、Tomcat7性能监控与优化
1. 目的 通过优化tomcat提高网站的并发能力. 2. 服务器资源 服务器所能提供CPU.内存.硬盘的性能对处理能力有决定性影响. 3. 优化配置 3.1. 配置tomcat管理员账户 ...