Django ORM 介绍

发布时间: 更新时间: 总字数:366 阅读时间:1m 作者: 分享

Django ORM 知识汇总

使用

Q

filter 等方法中的关键字参数查询都是一起进行 AND 的。 如果你需要执行更复杂的查询(例如 OR 语句),你可以使用Q 对象

from django.db.models import Q

Q 对象可以使用&(AND)|(OR)操作符组合起来。当一个操作符在两个 Q 对象上使用时,它产生一个新的Q 对象

Q(question__startswith='Who') | Q(question__startswith='What')

等同于SQL语句:

WHERE question LIKE 'Who%' OR question LIKE 'What%'

如果一个查询函数有多个Q 对象参数(逗号隔开的),这些参数的逻辑关系为AND

Poll.objects.get(
    Q(question__startswith='Who'),
    Q(pub_date=date(2005, 5, 2)) | Q(pub_date=date(2005, 5, 6))
)

等同于下列SQL语句:

SELECT * from polls WHERE question LIKE 'Who%'
    AND (pub_date = '2005-05-02' OR pub_date = '2005-05-06')

Q 对象可以使用 ~ 操作符取反,这允许组合正常的查询和取反(NOT) 查询:

Q(question__startswith='Who') | ~Q(pub_date__year=2005)

查询函数可以混合使用 Q 对象 和关键字参数。所有提供给查询函数的参数(关键字参数或Q 对象)都将AND在一起。但是,如果出现Q 对象,它必须位于所有关键字参数的前面。例如

Poll.objects.get(
    Q(pub_date=date(2005, 5, 2)) | Q(pub_date=date(2005, 5, 6)),
    question__startswith='Who')

下列是不合法的查询条件:

Poll.objects.get(
    question__startswith='Who',
    Q(pub_date=date(2005, 5, 2)) | Q(pub_date=date(2005, 5, 6)))
Home Archives Categories Tags Docs