F和Q查询
F查询:取出数据库的某个字段的值
# 把read_num都加1 from django.db.models import F ret=models.Book.objects.all().update(read_num=F('read_num')+1) print(ret) #查询评论数大于阅读数的书籍 ret=models.Book.objects.all().filter(commit_num__gt=F('read_num')) for i in ret: print(i.name) ## 查询评论数大于阅读数2倍的书籍 ret=models.Book.objects.filter(commit_num__gt=F('read_num')*2) print(ret)
#将所有书的名称后面加上爆款两个字
在操作字符类型的数据的时候 F 不能够直接做到字符串的拼接
from django.db.models.functions import Concat
from django.db.models import Value
models.Book.objects.update(title=Concat(F('title'),value('爆款'))
# Q查询:制造 与或非的条件
# Q查询:制造 与或非的条件
Q的对象可以使用&
和|
操作符组合起来,&等同于and,|等同于or
# 查询名字叫egon或者价格大于100的书
from django.db.models import Q # ret=models.Book.objects.filter(Q(name='egon') | Q(price__gt=100)) # 查询名字叫egon并且价格大于100的书 # ret=models.Book.objects.filter(Q(name='egon') & Q(price__gt=100)) # ret=models.Book.objects.filter(name='egon',price__gt=100) # 查询名字不为egon的书 # ret = models.Book.objects.filter(~Q(name='egon')) # print(ret) # Q可以嵌套 ret = models.Book.objects.filter((Q(name='egon') & Q(price__lt=100)) | Q(id__lt=3)) print(ret)
Q
对象可以使用~
操作符取反,相当于NOT
from django.db.models import Q
Employee.objects.filter(~Q(id__gt=5) | Q(name="Egon"))
# 等同于sql:select * from app01_employee where not (id < 5) or name = 'Egon';
当我们的过滤条件中既有or又有and,则需要混用Q对象与关键字参数,但Q
对象必须位于所有关键字参数的前面
from django.db.models import Q
Employee.objects.filter(Q(id__gt=5) | Q(name="Egon"),salary__lt=100)
# 等同于sql:select * from app01_employee where (id < 5 or name = 'Egon') and salary < 100;
Q的高阶用法 能够查询条件的左边也变成字符串的形式,客户端自行输入查询条件
q=Q() q.connector='or' #使用or 默认是and q.children.append(('maichu__gt',100)) q.children.append(('price__lt',600)) res=models.objects.filter(q) print(res)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南