当前位置: 移动技术网 > IT编程>脚本编程>Python > Django ORM (四) annotate,F,Q 查询

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

2019年05月28日  | 移动技术网IT编程  | 我要评论

泗玥,电磁炉不检锅,田汉简介

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")

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网