djano "and" "or" 在同一ORM 语句中的应用

在改造一套系统时,发现原来的SQL语句条件中混合了 AND 与 or 。如果用原生的 SQL 语句肯定是很好解决的事情,所以就不考虑用 DJANGO 的RAW  SQL 来实现,如果用这个实现,比较简单,可以参考写过的一篇文章:原生SQL 返回字典
在这里打算用 orM 来实现,因为条件并不复杂,也不涉及很多表的关联查询。
经过测试,对于这种既有AND 又有 or ,还得注意关系的语句,可以通过多个filter 来实现。
比如如下例子:
程序代码 程序代码

row=models.Plan.objects.filter(name__icontains='SUMMER',district='SH').filter(Q(sysowner='SUMMER') | Q(userlist__icontains='SUMMER'))

在这个例子中,其实可以看到用了两个filter:
前面一个filter 表示 name like '%summer%' and district='SH'
后面一个filter 表示 sysowner='SUMMER' or userlist like '%SUMMER%'

如果你开启 MYSQL  跟踪语句的话,会发现,django orm 会生成类似如下的SQL 语句:
程序代码 程序代码

select name,district...   from plan where name like '%summer%' and district='SH' and (sysowner='SUMMER' or userlist like '%SUMMER%')


这样,会自动给OR 关系的前后加上括号,这样SQL语句就没有问题了。

除非申明,文章均为一号门原创,转载请注明本文地址,谢谢!
[本日志由 轻舞肥羊 于 2012-09-28 04:26 PM 编辑]
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: django
相关日志:
评论: 0 | 引用: 0 | 查看次数: -
发表评论
昵 称:
密 码: 游客发言不需要密码.
内 容:
验证码: 验证码
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.