Django ORM (四) annotate,F,Q 查询
annotate
可以通过计算查询结果中每一个对象所关联的对象集合,从而得出总计值(也可以是平均值或总和),即为查询集的每一项生成聚合。
from django.shortcuts import render, HttpResponse
from app01 import models
from app01.models import Book,Author,Publisher
from django.db.models import Avg,Min,Sum,Max
def data_oper(req):
# 查询每个出版社书的总价
obj = models.Book.objects.values("publisher__name").annotate(Sum("price"))
print(obj)
return HttpResponse("Hello world")

# 查询 klvchen 出的书总价格
...
def data_oper(req):
obj = Book.objects.filter(authors__name="klvchen").aggregate(Sum("price"))
print(obj)
return HttpResponse("Hello world")

F查询
F 使用查询条件的值,专门取对象中某列值的操作
from django.shortcuts import render, HttpResponse
from app01 import models
from app01.models import Book,Author,Publisher
from django.db.models import Avg,Min,Sum,Max
from django.db.models import F
# 书籍的价格都加20
def data_oper(req):
models.Book.objects.all().update(price=F("price")+20)
return HttpResponse("Hello world")
Q 查询
Q 构建搜索条件
from django.shortcuts import render, HttpResponse
from app01 import models
from app01.models import Book,Author,Publisher
from django.db.models import Avg,Min,Sum,Max
from django.db.models import F,Q
from django.db.models import F,Q
# 查询 book 表 id 为3的书名,这里书名是因为在 models.py 定义的 class Book 里面 __str__ 返回的是 title 字段
def data_oper(req):
obj = models.Book.objects.filter(Q(id=3))[0]
print(obj)
return HttpResponse("Hello world")

.....
from django.db.models import F,Q
# 查询 book 表 id为3或者 title 为 GO 的记录
def data_oper(req):
obj = models.Book.objects.filter(Q(id=3)|Q(title="GO"))
print(obj)
return HttpResponse("Hello world")

Q对象可以与关键字参数查询一起使用,不过一定要把Q对象放在关键字参数查询的前面
from django.db.models import F,Q
def data_oper(req):
obj = models.Book.objects.filter(Q(price__gt=50)&(Q(id=3)|Q(title="php")), publisher_id=1)
print(obj)
return HttpResponse("Hello world")

Django ORM (四) annotate,F,Q 查询的更多相关文章
- orm中的聚合函数,分组,F/Q查询,字段类,事务
目录 一.聚合函数 1. 基础语法 2. Max Min Sum Avg Count用法 (1) Max()/Min() (2)Avg() (3)Count() (4)聚合函数联用 二.分组查询 1. ...
- Django框架08 /聚合查询、分组、F/Q查询、原生sql相关
Django框架08 /聚合查询.分组.F/Q查询.原生sql相关 目录 Django框架08 /聚合查询.分组.F/Q查询.原生sql相关 1. 聚合查询 2. 分组 3. F查询和Q查询 4. o ...
- Django day08 多表操作 (五) 聚合,分组查询 和 F,Q查询
一:聚合,分组查询 二:F, Q查询
- 分组\聚合\F\Q查询
一.分组和聚合查询 1.aggregate(*args,**kwargs) 聚合函数 通过对QuerySet进行计算,返回一个聚合值的字典.aggregate()中每一个参数都指定一个包含在字典中的 ...
- $Django 聚合函数、分组查询、F,Q查询、orm字段以及参数
一.聚合函数 from django.db.models import Avg,Sum,Max,Min,Count,F,Q #导入 # .查询图书的总价,平均价,最大价,最小价 ...
- 模型层字段-多表查询-神奇的双下划线查询-F,Q查询
Django ORM中常用的字段和参数 常用字段 AutoField int自增列,必须填入参数 primary_key=True.当model中如果没有自增列,则自动会创建一个列名为id的列. In ...
- Python数据库查询之组合条件查询-F&Q查询
F查询(取字段的值) 关于查询我们知道有filter( ) ,values( ) , get( ) ,exclude( ) ,如果是聚合分组,还会用到aggregate和annotate,甚至还有万能 ...
- python-day71--django多表双下划线查询及分组聚合及F/Q查询
#====================================双下划线的跨表查询===============# 前提 此时 related_name=bookList 属性查询: # 查 ...
- 聚合查询、分组查询、F&Q查询
一.聚合查询和分组查询 1.aggregate(*args, **kwargs): 通过对QuerySet进行计算,返回一个聚合值的字典.aggregate()中每个参数都指定一个包含在字典中的返回值 ...
随机推荐
- JS文本框输入限制
1上面的文本框只能输入数字代码(小数点也不能输入): CODE: <input onkeyup="this.value=this.value.replace(/\D/g,'')&quo ...
- 属性(property)与成员变量(ivar)
类内使用成员变量{}, 类外使用属性@property /*********** --- Person.h */ @interface Person : NSObject { NSString *_n ...
- httpclient通过post提交到webapi
var client = new HttpClient(); var url = BASConfig.Instance.SiteSettingsModule.SyncWorkLogAppUrl; va ...
- wcf post
服务端: 1.接口 [OperationContract] [ServiceKnownType(typeof(CreatMicroBlogFeedViewModel))] [WebInvoke(Bod ...
- 面向对象(OOP)一
一.面向对象理论 1)面向对象概念 面向对象编程(object Oriented Programming,OOP),是一种计算机编程构架,OOP达到软件工程的三个目标重用.灵活和扩展性. 2)什么是对 ...
- Android 在已有工程中实现微信图片压缩
这个我们需要自己去编译,但是已经有人帮我们编译好了,压缩算法也已经实现,因此,我们去下载然后编译即可:https://github.com/bither/bither-android-lib 首先将上 ...
- EasyUI整理学习
参考博客: https://www.cnblogs.com/adc8868/p/6647680.html http://www.jeasyui.com/documentation/# http://w ...
- C#运算符、控制流
1 运算符 1.1 一元运算符: -(负号).+(正号):可以省略 1.2 二元运算符: 优先级,*(乘)./(除).%(取余).+(加).-(减).=(赋值) 二元赋值运算符,=.+=.-= ...
- 谷歌chrome://chrome-urls/
查看DNS解析时间 1 chrome://dns/ 查看DNS解析的地址 1 chrome://net-internals/#dns 更多功能请参考 1 chrome://chrome-urls/ 以 ...
- Nginx+Keepalived双主轮询负载均衡
双主模式使用两个VIP,前段有2台服务器,互为主从,两台服务器同时工作,不存在资源浪费情况.同时在前端的DNS服务器对网站做多条A记录,实现了Nginx的负载均衡,当一台服务器故障时候,资源会转移到另 ...