1、聚合查询

 # 聚合函数aggregate,求指定字段的最大值,最小值,平均值,和的值,方法如下

    from django.db.models import Avg
from django.db.models import Sum
from django.db.models import Max
from django.db.models import Min obj = models.book.objects.all().aggregate(Avg("Book_price"))
print(obj) obj = models.book.objects.all().aggregate(Sum("Book_price"))
print(obj) obj = models.book.objects.all().aggregate(Max("Book_price"))
print(obj) obj = models.book.objects.all().aggregate(Min("Book_price"))
print(obj)

  

2、分组查询

    # 分组查询
# 首先把书籍通过作者进行分组,然后求每个作者的书的价格的平均值
obj = models.book.objects.all().values("Book_Auther").annotate(Avg("Book_price"))
print(obj)

  

3、F查询和Q查询

我们先提出一个问题,就是我们要把书这张表中的所有书的价格都加1000,该如何实现呢?我们可以用下面的方法实现

    id_list = models.book.objects.all().values_list("id")
# obj = models.book.objects.all()
for i in id_list:
new_price = models.book.objects.filter(id=i[0])[0].Book_price + 1000
models.book.objects.filter(id=i[0]).update(Book_price=new_price)

  

 # id_list = models.book.objects.all().values_list("id")
# # obj = models.book.objects.all()
# for i in id_list:
# new_price = models.book.objects.filter(id=i[0])[0].Book_price + 1000
# models.book.objects.filter(id=i[0]).update(Book_price=new_price) # F查询作用很局限,就是对某列的数据做操作,比如我们为价格这一列全部加10000,只能对数字列做操作,而且不能使用双下划线的属性
from django.db.models import F
# models.book.objects.all().update(Book_price=F("Book_price")+10000) # Q查询:我们之前查询的规则,比如filter中的规则,虽然可以写多个过滤条件,但是这些条件只能是and的关系,如果是or的关系,fileter就做不到了
# 这里就需要用到Q查询 # Q方法取或用“|”,去交集用 “&”
from django.db.models import Q
# 比如我们用到id大于5,或者价格大于10000的对象,或方法用一个管道符的方法 # 取并集
obj = models.book.objects.filter(Q(Book_price__gt=11000)|Q(id=2))
print(obj.values("Book_price","id")) # 去交集
obj = models.book.objects.filter(Q(Book_price__gt=11000) & Q(id=2)) # Q查询和字段查询可以混合使用,但是字段必须要放在最后
obj = models.book.objects.filter(Q(Book_price__gt=11000) & Q(id=2),Book_info__contains="aaaa")
return HttpResponse("test5")

  

传入条件查询

q1 = Q()
q1.connector = 'OR'
q1.children.append(('id', 1))
q1.children.append(('id', 2))
q1.children.append(('id', 3)) models.Tb1.objects.filter(q1)

合并条件查询

con = Q()

q1 = Q()
q1.connector = 'OR'
q1.children.append(('id', 1))
q1.children.append(('id', 2))
q1.children.append(('id', 3)) q2 = Q()
q2.connector = 'OR'
q2.children.append(('status', '在线')) con.add(q1, 'AND')
con.add(q2, 'AND') models.Tb1.objects.filter(con)

Django的mode的分组查询和聚合查询和F查询和Q查询的更多相关文章

  1. Django【第7篇】:Django之ORM跨表操作(聚合查询,分组查询,F和Q查询等)

    django之跨表查询及添加记录 一:创建表 书籍模型: 书籍有书名和出版日期,一本书可能会有多个作者,一个作者也可以写多本书,所以作者和书籍的关系就是多对多的关联关系(many-to-many); ...

  2. Django框架(十)—— 多表操作:一对一、一对多、多对多的增删改,基于对象/双下划线的跨表查询、聚合查询、分组查询、F查询与Q查询

    目录 多表操作:增删改,基于对象/双下划线的跨表查询.聚合查询.分组查询.F查询与Q查询 一.创建多表模型 二.一对多增删改表记录 1.一对多添加记录 2.一对多删除记录 3.一对多修改记录 三.一对 ...

  3. Django框架08 /聚合查询、分组、F/Q查询、原生sql相关

    Django框架08 /聚合查询.分组.F/Q查询.原生sql相关 目录 Django框架08 /聚合查询.分组.F/Q查询.原生sql相关 1. 聚合查询 2. 分组 3. F查询和Q查询 4. o ...

  4. 70 多表查询的分组F 聚合 Q 查询

    聚合查询和分组查询 聚合 aggregate()是QuerySet 的一个终止子句,意思是说,它返回一个包含一些键值对的字典.键的名称是聚合值的标识符,值是计算出来的聚合值.键的名称是按照字段和聚合函 ...

  5. Django-ORM之聚合和分组查询、F和Q查询、事务

    聚合查询 聚合对查询的结果进行一步的计算加工. aggregate()是QuerySet 的一个终止子句 ,他的作用是,返回一个包含一些键值对的字典.键的名称是聚合值的标识符,值是计算出来的聚合值.键 ...

  6. Django中多表的增删改查操作及聚合查询、F、Q查询

    一.创建表 创建四个表:书籍,出版社,作者,作者详细信息 四个表之间关系:书籍和作者多对多,作者和作者详细信息一对一,出版社和书籍一对多 创建一对一的关系:OneToOne("要绑定关系的表 ...

  7. 八、django学习之分组查询、F查询和Q查询

    分组查询.F查询和Q查询 分组查询 统计每个出版社出版的书籍的平均价格 第一种方式 obj = models.Book.objects.values('publishs_id').annotate(a ...

  8. Django Mysql数据库-F查询和Q查询

    一.F查询和Q查询 F查询: 在上面所有的例子中,我们构造的过滤器都只是将字段值与某个常量做比较.如果我们要对两个字段的值做比较,那该怎么做呢? Django 提供 F() 来做这样的比较.F() 的 ...

  9. $Django 聚合函数、分组查询、F,Q查询、orm字段以及参数

        一.聚合函数    from django.db.models import Avg,Sum,Max,Min,Count,F,Q   #导入    # .查询图书的总价,平均价,最大价,最小价 ...

随机推荐

  1. html5 progress样式修改

    CSS代码: .deal progress { -webkit-appearance: none; } .deal ::-webkit-progress-inner-element { } .deal ...

  2. Ubuntu终端文件的压缩和解压缩命令

    在Ubntu的终端中压缩和解压缩是每天几乎要用到的命令,由于linux中各种压缩文件类型较多,所以需要记住几个主要的压缩和解压缩命令: 文件类型 执行动作 命令 .tar 解包 tar xvf Fil ...

  3. JAVA的非对称加密算法RSA——加密和解密

    原文转载至:https://www.cnblogs.com/OnlyCT/p/6586856.html 第一部分:RSA算法原理与加密解密 一.RSA加密过程简述 A和B进行加密通信时,B首先要生成一 ...

  4. C#获取电脑硬件信息(CPU ID、主板ID、硬盘ID、BIOS编号)

    最近学习过程中,想到提取系统硬件信息做一些验证,故而对网上提到的利用.NET System.Management类获取硬件信息做了进一步的学习.验证.验证是分别在4台电脑,XP SP3系统中进行,特将 ...

  5. sql server查看表占用索引空间(小技巧)

    选择表右键—属性—存储—索引空间

  6. CSS层叠样式

    为了让网页元素的样式更加丰富,也为了让网页的内容和样式能拆分开,CSS由此思想而诞生,CSS是 Cascading Style Sheets 的首字母缩写,意思是层叠样式表.有了CSS,html中大部 ...

  7. Elasticsearch究竟要设置多少分片数?

    0.引言 本文翻译自Elasticsearch20170918热乎的官方博客,原作者:Christian Dahlqvist. 在构建Elasticsearch集群的初期如果集群分片设置不合理,可能在 ...

  8. leetcode973

    public class POINT { public int X; public int Y; public int Z; } public class Solution { public int[ ...

  9. as2 loadClip

    loadClip(url:String, target:Object) : Boolean target是直接被赋值,而不是add进去

  10. 使用 C++11 编写类似 QT 的信号槽——下篇

    要实现 Signal-Slot,Signal 类中应该拥有一个保存 std::function 的数组: template<class FuncType> class Signal { p ...