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

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

在改造一套系统时,发现原来的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语句就没有问题了。

上一篇: django模板中得到request 的各种信息
下一篇: Linux 下配置snmp, 利用snmp监控Linux 服务器
 评论 ( What Do You Think )
名称
邮箱
网址
评论
验证
   
 

 


  • 微信公众号

  • 我的微信

站点声明:

1、一号门博客CMS,由Python, MySQL, Nginx, Wsgi 强力驱动

2、部分文章或者资源来源于互联网, 有时候很难判断是否侵权, 若有侵权, 请联系邮箱:summer@yihaomen.com, 同时欢迎大家注册用户,主动发布无版权争议的 文章/资源.

3、鄂ICP备14001754号-3, 鄂公网安备 42280202422812号