django数据查询之F查询和Q查询
Posted jiarenanhao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了django数据查询之F查询和Q查询相关的知识,希望对你有一定的参考价值。
仅仅靠单一的关键字参数查询已经很难满足查询要求。此时Django为我们提供了F和Q查询:
1 # F 使用查询条件的值,专门取对象中某列值的操作 2 3 # from django.db.models import F 4 # models.Tb1.objects.update(num=F(‘num‘)+1) 5 6 7 # Q 构建搜索条件 8 from django.db.models import Q 9 10 #1 Q对象(django.db.models.Q)可以对关键字参数进行封装,从而更好地应用多个查询 11 q1=models.Book.objects.filter(Q(title__startswith=‘P‘)).all() 12 print(q1)#[<Book: Python>, <Book: Perl>] 13 14 # 2、可以组合使用&,|操作符,当一个操作符是用于两个Q的对象,它产生一个新的Q对象。 15 Q(title__startswith=‘P‘) | Q(title__startswith=‘J‘) 16 17 # 3、Q对象可以用~操作符放在前面表示否定,也可允许否定与不否定形式的组合 18 Q(title__startswith=‘P‘) | ~Q(pub_date__year=2005) 19 20 # 4、应用范围: 21 22 # Each lookup function that takes keyword-arguments (e.g. filter(), 23 # exclude(), get()) can also be passed one or more Q objects as 24 # positional (not-named) arguments. If you provide multiple Q object 25 # arguments to a lookup function, the arguments will be “AND”ed 26 # together. For example: 27 28 Book.objects.get( 29 Q(title__startswith=‘P‘), 30 Q(pub_date=date(2005, 5, 2)) | Q(pub_date=date(2005, 5, 6)) 31 ) 32 33 #sql: 34 # SELECT * from polls WHERE question LIKE ‘P%‘ 35 # AND (pub_date = ‘2005-05-02‘ OR pub_date = ‘2005-05-06‘) 36 37 # import datetime 38 # e=datetime.date(2005,5,6) #2005-05-06 39 40 # 5、Q对象可以与关键字参数查询一起使用,不过一定要把Q对象放在关键字参数查询的前面。 41 # 正确: 42 Book.objects.get( 43 Q(pub_date=date(2005, 5, 2)) | Q(pub_date=date(2005, 5, 6)), 44 title__startswith=‘P‘) 45 # 错误: 46 Book.objects.get( 47 question__startswith=‘P‘, 48 Q(pub_date=date(2005, 5, 2)) | Q(pub_date=date(2005, 5, 6)))
参考来源:https://www.cnblogs.com/liuwchao/articles/9831942.html
以上是关于django数据查询之F查询和Q查询的主要内容,如果未能解决你的问题,请参考以下文章
[Django框架之ORM操作:多表查询,聚合查询分组查询F查询Q查询choices参数]
django操作数据库之查询F,Q操作 和 seach搜索功能
Django学习第7篇:Django之ORM跨表操作(聚合查询,分组查询,F和Q查询等)