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查询等)

django之 F与Q查询

Django之ORM跨表操作(聚合查询,分组查询,F和Q查询等)

Django之F与Q查询