Django的mode的分组查询和聚合查询和F查询和Q查询
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查询的更多相关文章
- Django【第7篇】:Django之ORM跨表操作(聚合查询,分组查询,F和Q查询等)
django之跨表查询及添加记录 一:创建表 书籍模型: 书籍有书名和出版日期,一本书可能会有多个作者,一个作者也可以写多本书,所以作者和书籍的关系就是多对多的关联关系(many-to-many); ...
- Django框架(十)—— 多表操作:一对一、一对多、多对多的增删改,基于对象/双下划线的跨表查询、聚合查询、分组查询、F查询与Q查询
目录 多表操作:增删改,基于对象/双下划线的跨表查询.聚合查询.分组查询.F查询与Q查询 一.创建多表模型 二.一对多增删改表记录 1.一对多添加记录 2.一对多删除记录 3.一对多修改记录 三.一对 ...
- Django框架08 /聚合查询、分组、F/Q查询、原生sql相关
Django框架08 /聚合查询.分组.F/Q查询.原生sql相关 目录 Django框架08 /聚合查询.分组.F/Q查询.原生sql相关 1. 聚合查询 2. 分组 3. F查询和Q查询 4. o ...
- 70 多表查询的分组F 聚合 Q 查询
聚合查询和分组查询 聚合 aggregate()是QuerySet 的一个终止子句,意思是说,它返回一个包含一些键值对的字典.键的名称是聚合值的标识符,值是计算出来的聚合值.键的名称是按照字段和聚合函 ...
- Django-ORM之聚合和分组查询、F和Q查询、事务
聚合查询 聚合对查询的结果进行一步的计算加工. aggregate()是QuerySet 的一个终止子句 ,他的作用是,返回一个包含一些键值对的字典.键的名称是聚合值的标识符,值是计算出来的聚合值.键 ...
- Django中多表的增删改查操作及聚合查询、F、Q查询
一.创建表 创建四个表:书籍,出版社,作者,作者详细信息 四个表之间关系:书籍和作者多对多,作者和作者详细信息一对一,出版社和书籍一对多 创建一对一的关系:OneToOne("要绑定关系的表 ...
- 八、django学习之分组查询、F查询和Q查询
分组查询.F查询和Q查询 分组查询 统计每个出版社出版的书籍的平均价格 第一种方式 obj = models.Book.objects.values('publishs_id').annotate(a ...
- Django Mysql数据库-F查询和Q查询
一.F查询和Q查询 F查询: 在上面所有的例子中,我们构造的过滤器都只是将字段值与某个常量做比较.如果我们要对两个字段的值做比较,那该怎么做呢? Django 提供 F() 来做这样的比较.F() 的 ...
- $Django 聚合函数、分组查询、F,Q查询、orm字段以及参数
一.聚合函数 from django.db.models import Avg,Sum,Max,Min,Count,F,Q #导入 # .查询图书的总价,平均价,最大价,最小价 ...
随机推荐
- AJAX XML 实例
AJAX XML 实例 下面的例子将演示网页如何使用 AJAX 来读取来自 XML 文件的信息 <!DOCTYPE html> <html> <head> < ...
- Fragment之介绍(转)
http://www.cnblogs.com/plokmju/p/3239265.html 前言 开门见山开篇名义,本篇博客将讲解一下Android中Fragment的内容,必要的地方会提供相应的演示 ...
- 3D Render
记录最近遇到的问题: 1:崩溃问题 由于高频率获取DC异常导致. void D3D11Texture2D::Copy2Window(void* srcdc, uint32_t left, uint32 ...
- linux开机启动详细流程图
linux开机启动详细流程图: 一.BIOS 加电自检当你按电源开关开机时,电脑会首先去启动BIOS(基本输入输出系统),BIOS一般是集成在主板上的.BIOS 的工作1.检测连接硬件,比如显卡,内存 ...
- redis入门之jedis
jedis是redis官方首选的java客户端开发包 开源托管地址:https://github.com/xetorthio/jedis 下载地址,以及maven, 依赖参考: 下面来编写一段程序进行 ...
- 大话java性能优化 pdf 下载(全本)
扫加公众号,回复”大话java性能优化",免费获取此书.
- foreach的使用
//foreach循环语句,常用来遍历数组,一般有两种使用方法:不取下标,取下标 //不取下表 foreach(数组 as 值) { //执行的程序 echo 值; } //取下标 foreach(数 ...
- django模板中自动加载static
TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join( ...
- WPF 颜色拾色器
效果图: 下载:Code 参考: http://www.codeproject.com/Articles/33001/WPF-A-Simple-Color-Picker-With-Previewhtt ...
- 楼层验证B1~1F等
$("#mapManagerEditForm").bootstrapValidator("addField","floors",{ vali ...