Django之F和Q查询参考资料
https://zhuanlan.zhihu.com/p/266071973
初始数据
- 增加了两个字段,并插入了一些数据
- 在pycharm的models中增加,设置null=True
Ⅱ F查询
导入:from django.db models import F
import os
if __name__ == '__main__':
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "wot.settings")
import django
django.setup()
from app01 import models
from django.db.models import F,Q
使用F对字段进行包裹,可以直接进行数学运算
res = models.Bbook.objects.all().update(read_num=F('read_num')+1)
查询评论数大于阅读数的书籍
res = models.Bbook.objects.all().filter(commit_num__gt=F('read_num'))
for re in res:
print(re.name)
查询评论数大于阅读数2倍的书籍
res = models.Bbook.objects.all().filter(commit_num__gt=F('read_num')*2)
for re in res:
print(re.name)
Q查询
- Q查询:制造 与或非的条件
- filter(Q() | Q()) 将条件进行包裹组成 与或非 关系
- 查询作者名字是猎虎或者价格大于5000的书 -- 或
res = models.Bbook.objects.filter(Q(authors__name='猎虎')|Q(price__gt=5000))
for re in res:
print(re.name)
查询作者名字是猎虎并且价格大于5000的书 -- 与 &
# res = models.Bbook.objects.filter(Q(authors__name='猎虎') & Q(price__gt=5000))
res = models.Bbook.objects.filter(Q(authors__name='猎虎',price__gt=5000))
for re in res:
print(re.name)
查询作者名字不是猎虎的书
res = models.Bbook.objects.filter(~Q(authors__name='猎虎'))
for re in res:
print(re.name)
Q可以嵌套
res = models.Bbook.objects.filter((Q(authors__name='猎虎') & Q(price__gt=100)) | Q(id__lt=29))
for re in res:
print(re.name)