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的更多相关文章

  1. Django ORM多表查询练习

    ORM多表查询 创建表结构: from django.db import models # 创建表结构 # Create your models here. class Class_grade(mod ...

  2. Django ORM多表查询

    基于双下划线查询 根据存的时候,字段的数据格式衍生的查询方法 1.年龄大于35岁 res = models.AuthorDetails.objects.filter(age__lt=80) print ...

  3. django ORM 连表查询

    db_index=True  如果设置该字段就可以设置索引 auto_now_add  代表设置创建时候的时间 auto_now   每次更新数据记录时会更新该字段 to_field 设置要关联表的字 ...

  4. Django ORM单表查询必会13条

    必知必会13条 操作下面的操作之前,我们实现创建好了数据表,这里主要演示下面的操作,不再细讲创建准备过程 <1> all(): 查询所有结果 <2> filter(**kwar ...

  5. django orm跨表查询废话最少最精简版

    在model.py中: class B1(models.Model): u1= models.CharField(max_length=32) #多 class B2(models.Model): f ...

  6. python 之 Django框架(orm单表查询、orm多表查询、聚合查询、分组查询、F查询、 Q查询、事务、Django ORM执行原生SQL)

    12.329 orm单表查询 import os if __name__ == '__main__': # 指定当前py脚本需要加载的Django项目配置信息 os.environ.setdefaul ...

  7. 第五章、Django之多表查询进阶与事务

    目录 第五章.Django之多表查询 一.聚合查询 二.分组查询 三.F与Q查询 四.查询优化 五.Django开启事务 六.自定义char字段 七.ORM常用字段 第五章.Django之多表查询 一 ...

  8. 第十七篇 ORM跨表查询和分组查询---二次剖析

    ORM跨表查询和分组查询---二次剖析 阅读目录(Content) 创建表(建立模型) 基于对象的跨表查询 一对多查询(Publish与Book) 多对多查询 (Author 与 Book) 一对一查 ...

  9. ORM单表查询,跨表查询,分组查询

    ORM单表查询,跨表查询,分组查询   单表查询之下划线 models.Tb1.objects.filter(id__lt=10, id__gt=1) # 获取id大于1 且 小于10的值models ...

随机推荐

  1. from xml.etree import cElementTree as ET

  2. ViewPager+Fragment基本使用方法(附源码)

    ViewPager+Fragment可以做出多页面滑动效果,让我们的应用程序界面操作起来更加灵活 对于ViewPager和Fragment组件还不熟悉的朋友,可以先看看相关的资料. 首先在activi ...

  3. C++实现数组的排序/插入重新排序/以及逆置操作

    插入新的数字重新排序 分析:将新的数字与已经排序好的数组中的数字一一比较,直到找到插入点,然后将插入点以后的数字都向后移动一个单位(a[i+1]=a[i]),然后将数据插入即可. 代码: #inclu ...

  4. Halcon从某一个图片以指定区域绘制到另一个图像

    ************************************************************* * Halcon从某一个图片以指定区域绘制到另一个图像 * Author: ...

  5. Java-马士兵设计模式学习笔记-工厂模式-单例及多例

    一.单例的作用是用于控制类的生成方式,而不让外部类任意new对象 1.Car.java import java.util.ArrayList; import java.util.List; publi ...

  6. 51NOD 1616 最小集合

    传送门 分析 不难发现集合中的数一定是集合内其它一堆数的$gcd$ 于是我们枚举$i$,统计原来集合中有几个数是$i$的倍数,设这个值为$f(i)$ 之后对于每个$i$如果不存在$f(x*i) = f ...

  7. 红帽rhel7.1usbguard

    https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/security_guide/sec-usi ...

  8. (数组)对数组中的数字加1(plus one)

    题目:https://www.nowcoder.com/practice/4d135ddb2e8649ddb59ee7ac079aa882?tpId=46&tqId=29111&tPa ...

  9. symbol访问法及symbor注册表

    symbol主要作用是防止对象属性名冲突 在ES6之前,对象的属性名只能是字符串,这样很容易造成字符串的冲突. 例:假设person对象是从外部库引入的一个对象 let person = { name ...

  10. Spring.Net 未将对象引用设置到对象的实例

    “/”应用程序中的服务器错误. 未将对象引用设置到对象的实例. 说明: 执行当前 Web 请求期间,出现未经处理的异常.请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息. 异常详 ...