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 ...
随机推荐
- DOM详习讲解
http://www.cnblogs.com/wupeiqi/articles/5643298.html
- nyoj42欧拉回路
一笔画问题 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 zyc从小就比较喜欢玩一些小游戏,其中就包括画一笔画,他想请你帮他写一个程序,判断一个图是否能够用一笔画下 ...
- 数组中的最大值以及最小值的位置变换的问题(C++)
将一个5×5的数组中的最大值放到数组的中心位置 分析:遍历数组,找到最大的元素,然后将该元素与中心位置的元素交换位置 #include<iostream> #include <std ...
- C语言中的static的作用?
在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有三条. (1)第一个作用:隐藏. 当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性.为理解这句话 ...
- 查看类属性和方法---structure
- html 连接数据库
http://blog.csdn.net/haxker/article/details/4214001 http://www.cnblogs.com/chuncn/archive/2010/11/22 ...
- 小小c#算法题 - 7 - 堆排序 (Heap Sort)
在讨论堆排序之前,我们先来讨论一下另外一种排序算法——插入排序.插入排序的逻辑相当简单,先遍历一遍数组找到最小值,然后将这个最小值跟第一个元素交换.然后遍历第一个元素之后的n-1个元素,得到这n-1个 ...
- C++轮子队-第六周--事后分析
C++轮子队 设想和目标 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 实现2048+俄罗斯方块结合的小游戏,定义的比较清楚,典型用户也很清晰,提供给那些对该类游 ...
- 并发编程学习笔记之可见性&过期数据(二)
想要使用多线程编程,有一个很重要的前提,那就是必须保证操纵的是线程安全的类. 那么如何构建线程安全的类呢? 1. 使用同步来避免多个线程在同一时间访问同一数据. 2. 正确的共享和安全的发布对象,使多 ...
- 《Linux内核设计与实现》读书笔记(六)- 内核数据结构
内核数据结构贯穿于整个内核代码中,这里介绍4个基本的内核数据结构. 利用这4个基本的数据结构,可以在编写内核代码时节约大量时间. 主要内容: 链表 队列 映射 红黑树 1. 链表 链表是linux内核 ...