Django ORM (四) annotate,F,Q 查询

###annotate 可以通过计算查询结果中每一个对象所关联的对象集合,从而得出总计值(也可以是平均值或总和),即为查询集的每一项生成聚合。

1from django.shortcuts import render, HttpResponse 2from app01 import models 3from app01.models import Book,Author,Publisher 4from django.db.models import Avg,Min,Sum,Max 5 6def data_oper(req): 7 # 查询每个出版社书的总价 8 obj = models.Book.objects.values("publisher__name").annotate(Sum("price")) 9 print(obj) 10 return HttpResponse("Hello world")

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

###F查询 F 使用查询条件的值,专门取对象中某列值的操作

1from django.shortcuts import render, HttpResponse 2from app01 import models 3from app01.models import Book,Author,Publisher 4from django.db.models import Avg,Min,Sum,Max 5from django.db.models import F 6 7# 书籍的价格都加20 8def data_oper(req): 9 models.Book.objects.all().update(price=F("price")+20) 10 return HttpResponse("Hello world")

###Q 查询 Q 构建搜索条件

1from django.shortcuts import render, HttpResponse 2from app01 import models 3from app01.models import Book,Author,Publisher 4from django.db.models import Avg,Min,Sum,Max 5from django.db.models import F,Q 6from django.db.models import F,Q 7 8# 查询 book 表 id 为3的书名,这里书名是因为在 models.py 定义的 class Book 里面 __str__ 返回的是 title 字段 9def data_oper(req): 10 obj = models.Book.objects.filter(Q(id=3))[0] 11 print(obj) 12 return HttpResponse("Hello world")

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

Q对象可以与关键字参数查询一起使用,不过一定要把Q对象放在关键字参数查询的前面

1from django.db.models import F,Q 2 3def data_oper(req): 4 obj = models.Book.objects.filter(Q(price__gt=50)&(Q(id=3)|Q(title="php")), publisher_id=1) 5 print(obj) 6 return HttpResponse("Hello world")

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )