Django ORM (四) annotate,F,Q 查询
2024-08-25 22:19:19
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")
最新文章
- OpenCASCADE AIS Manipulator
- net-snmp源码VS2013编译添加加密支持(OpenSSL)(在VS里配置编译OpenSSL)
- jquery.form.js表单插件的使用
- makefile高级用法--使用函数
- JavaScript(10)——Ajax以及跨域处理
- Maven项目中提示:Eclipse “cannot be resolved to a type” error
- (转)sizeof
- mac的terminal快捷键
- swagger-codegen自动生成代码工具的介绍与使用
- HDU - 1062
- ANSYS中的阻尼damper
- java效率取随机不重复数
- 线程安全的集合类、CopyOnWrite机制介绍(转)
- 无名管道跟dup,dup的使用
- C# 通过 HTTPModule 防范 DOS
- 深入浅出 Java Concurrency (14): 锁机制 part 9 读写锁 (ReentrantReadWriteLock) (2)
- thinkphp5 toArray()报错
- 算法笔记_085:蓝桥杯练习 9-3摩尔斯电码(Java)
- php查询mysql时,报超出内存错误(select count(distinct))时
- suse更改root密码
热门文章
- AOP注解方式
- pat1064. Complete Binary Search Tree (30)
- $.ajax仿axios封装
- HttpClient向后端的WebAPI工程发送HTTP的Post请求时,返回超过了最大请求长度的异常的解决方法
- usb-host一步一步学(二)安卓在usb-host模式下列出当前连接的usb设备
- JavaWeb前端笔记
- 用C++/CLI搭建C++和C#之间的桥梁
- PHP函数:mysql_fetch_assoc指针重置
- CentOS-7系统安装配置
- JavaScript-判断语句(if...else)