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()中每个参数都指定一个包含在字典中的返回值 ...
随机推荐
- Hive 基本语法操练(二):视图和索引操作
1. 视图操作 ------- 1) 创建一个测试表. ``` hive> create table test(id int,name string); OK Time taken: 0.385 ...
- Linux下mysql定时备份及恢复
备份 1.数据库定时备份工作脚本:(日期时间作为名称的压缩文件,解压开是sql脚本) /root/backup/script/backup_mysql.sh 2.备份输出路径: /root/backu ...
- 字符串实现Base64加密/解密
有时候需要对字符串进行加密,不以明文显示,可以使用此方法,比如对URL的参数加密 using System; using System.Collections.Generic; using Syste ...
- vue3.0学习笔记(二)
一.选择合适的ide 推荐使用vs code编辑器,界面清晰.使用方便,控制台功能很好用.webstorm也可以,看个人喜好. 二.ui框架选择 目前,pc端一般是选择element ui(饿了么), ...
- weex 项目开发 weexpack 项目 打包、签名、发布
一. weexpack build android 和 weexpack run android 的 区别. (1)单纯打包 weexpack build android (2)打包并运行 wee ...
- Android中渐变图片失真的解决方案
在android开发(尤其是android游戏开发)中有一个很严重的问题就是带有渐变效果的png图片会出现严重的banding(色带),鉴于这种情况,有几种可行的解决方法: 1.如果Activit ...
- java 创建一个新的http 请求的一种实现方式
项目中遇到要在后台向集群中的其他一台服务器发送一个请求,参考了网上一些材料,最终完成了需求.代码如下 /** * @Title requestURLWithPost * @Description:发送 ...
- Entity Framework --Entity SQL注意事项
Entity SQL 是 ADO.NET 实体框架 提供的 SQL 类语言,用于支持 实体数据模型 (EDM).Entity SQL 可用于对象查询和使用 EntityClient 提供程序执行的查询 ...
- 在SQL中查看文件组中有哪些表
SELECT o.[name], o.[type], i.[name], i.[index_id], f.[name] FROM sys.indexes i INNER JOIN sys.filegr ...
- Liunx开发(Extjs4.1+desktop+SSH2超强视频教程实践)(2)
然后装eclipse: 为啥默认是搜狗导航: java还没装呢: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downlo ...