• Index

Django之F和Q查询

Reads: 799 Edit

Django之F和Q查询参考资料

https://zhuanlan.zhihu.com/p/266071973

初始数据

  • 增加了两个字段,并插入了一些数据
  • 在pycharm的models中增加,设置null=True

v2-41b75141800672854d7ec8340a839d15_720w

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

v2-bd9a9d11ec93dfd72e64a06d1022ad1a_720w

v2-7d147fb062ad079abec5c4650a6d7ace_720w

查询评论数大于阅读数的书籍

res = models.Bbook.objects.all().filter(commit_num__gt=F('read_num'))
for re in res:
	print(re.name)

v2-e4d439167c4daca4762252d8c21d6a0b_720w

查询评论数大于阅读数2倍的书籍

res = models.Bbook.objects.all().filter(commit_num__gt=F('read_num')*2)
for re in res:
	print(re.name)

v2-002454521b2823503e9bc182959e706f_720w

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)

v2-000de01cbb081b0d536315467af94a1d_720w

查询作者名字是猎虎并且价格大于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)

v2-8ba187c0bd8c229c1a916aaab72d8935_720w

查询作者名字不是猎虎的书

res = models.Bbook.objects.filter(~Q(authors__name='猎虎'))
for re in res:
	print(re.name)

v2-a295459c3b85703fe775dbf1de623673_720w

Q可以嵌套

res = models.Bbook.objects.filter((Q(authors__name='猎虎') & Q(price__gt=100)) | Q(id__lt=29))
for re in res:
    print(re.name)

v2-9ee1d9d156ede322347bdea7f572a8d2_720w


Comments

Make a comment

www.ultrapower.com ,王硕的博客,专注于研究互联网产品和技术,提供中文精品教程。 本网站与其它任何公司及/或商标无任何形式关联或合作。
  • Index
aaaaa