Django之ORM中Q与F查询
以这张User表为示例
F查询:能够直接获取到表中指定字段对应的数据
from django.db.models import F
# 查询user表中weight大于height的数据
models.User.objects.filter(F(weight__gt=F("height")))
# 将user表中所有的age增加5
models.User.objects.update(age=F("age")+5)
# 将所有数据name字段末尾加个“好帅”
# 在操作字符类型的数据的时候 , F不能够直接做到字符串的拼接 需要借助Concat模块和Value模块
from django.db.models.functions import Concat
from django.db.models import Value
models.User.objects.update(name=Concat(F("name"), Value("好帅")))
Q查询:能够改变多个查询条件之间的关系 与或非
from django.db.models import Q
# 基础用法
# age小于18 且 weight大于160
models.User.objects.filter(Q(age__lt=18), Q(weight__gt=160)) # 默认是and
# age小于18 或 weight大于160
models.User.objects.filter(Q(age__lt=18) | Q(weight__gt=160)) # | 是或
# age不小于18 且 weight不大于160
models.User.objects.filter(~Q(age__lt=18) ~ Q(weight__gt=160)) # ~ 是非
# 高级用法
q = Q() # Q的底层是一个对象
# 修改默认链接关系为 or
q.connector = "or"
# 一般查询数据的时候,条件左边都是变量名的形式,这里可以通过Q对象做到左边为字符串(动态指定查询条件)
q.children.append(("name", "小明")) # 第一个参数为变量名,第二个参数为值
q.children.append(("age", 18)) # 也可以添加多个条件
models.User.objects.filter(q)