Django Q对象
来源:互联网 发布:网络强国 群众参与 编辑:程序博客网 时间:2024/06/05 04:03
使用Q 对象进行复杂的查询¶
filter() 等方法中的关键字参数查询都是一起进行“AND” 的。 如果你需要执行更复杂的查询(例如OR 语句),你可以使用Q对象。
Q对象 (django.db.models.Q) 对象用于封装一组关键字参数。这些关键字参数就是上文“字段查询” 中所提及的那些。
例如,下面的Q 对象封装一个LIKE 查询:
from django.db.models import QQ(question__startswith='What')
Q 对象可以使用& 和| 操作符组合起来。当一个操作符在两个Q 对象上使用时,它产生一个新的Q 对象。
例如,下面的语句产生一个Q 对象,表示两个"question__startswith" 查询的“OR” :
Q(question__startswith='Who') | Q(question__startswith='What')
它等同于下面的SQL WHERE 子句:
WHERE question LIKE 'Who%' OR question LIKE 'What%'
你可以组合& 和| 操作符以及使用括号进行分组来编写任意复杂的Q 对象。同时,Q 对象可以使用~ 操作符取反,这允许组合正常的查询和取反(NOT) 查询:
Q(question__startswith='Who') | ~Q(pub_date__year=2005)
每个接受关键字参数的查询函数(例如filter()、exclude()、get())都可以传递一个或多个Q 对象作为位置(不带名的)参数。如果一个查询函数有多个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 对象和关键字参数。所有提供给查询函数的参数(关键字参数或Q 对象)都将"AND”在一起。但是,如果出现Q 对象,它必须位于所有关键字参数的前面。例如:
Poll.objects.get( Q(pub_date=date(2005, 5, 2)) | Q(pub_date=date(2005, 5, 6)), question__startswith='Who')
... 是一个合法的查询,等同于前面的例子;但是:
# INVALID QUERYPoll.objects.get( question__startswith='Who', Q(pub_date=date(2005, 5, 2)) | Q(pub_date=date(2005, 5, 6)))
... 是不合法的。
另见
Django 单元测试中的OR 查询示例演示了几种Q 的用法。
Django的Q对象实现的源码中:
传Q对象,构造搜索条件
首先还是需要导入模块:
from django.db.models import Q
传入条件进行查询:
q1 = Q()q1.connector = 'OR'q1.children.append(('id', 1))q1.children.append(('id', 2))q1.children.append(('id', 3)) models.Tb1.objects.filter(q1)
合并条件进行查询:
con = Q()q1 = Q()q1.connector = 'OR'q1.children.append(('id', 1))q1.children.append(('id', 2))q1.children.append(('id', 3))q2 = Q()q2.connector = 'OR'q2.children.append(('status', '在线'))con.add(q1, 'AND')con.add(q2, 'AND')models.Tb1.objects.filter(con)
阅读全文
0 0
- Django Q对象
- Python3之Django Web框架F对象,Q对象
- Django之使用Q对象批量删除数据
- Django中的Q查询
- Django的Q查询
- Django Q查询
- django Q查询
- Django中的Q查询
- Django系列教程(4)-- 模型中的F对象和Q对象
- Python中缀语法实现管道并介绍Django的Q对象
- django Q和F查询
- django Q和F查询
- django进阶11 聚合查询 Q
- django filter 中使用 or (django中Q)
- django学习——采用Q()方法进行查询
- django 查询对象
- django的HTTPREQUEST对象
- django的request对象
- http://www.cnblogs.com/yuruhao/p/7269024.html
- LINUX第一章作业
- 守护线程与线程阻塞的四种情况
- 比尔盖茨——互联网时代的巨人
- C++计算代码运行时间
- Django Q对象
- mysql查询优化
- Ubuntu Desktop 16.04下安装Visual Studio Code
- postgis2.2安装教程
- 欢迎使用CSDN-markdown编辑器
- 多线程--生命周期 状态图
- 学习笔记:浏览器渲染优化——关键渲染路径
- 【软件工程】面向对象之设计模式
- 项目中模拟服务器响应与实现异步请求(react)