python – 为Django Query强制INNER JOIN
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 为Django Query强制INNER JOIN,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含999字,纯文字阅读大概需要2分钟。
内容图文
![python – 为Django Query强制INNER JOIN](/upload/InfoBanner/zyjiaocheng/736/cf453c9642924588a183948c9ff42fd9.jpg)
这是我的架构:
城市 – >摄影师
我正在尝试获得至少有一位摄影师的城市名单,并返回城市的摄影师数量.
这是我正在使用的查询集:
City.objects.annotate(photographer_count=aggregates.Count('photographers')).filter(photographer_count__gt=0).order_by('-photographer_count')
这完全符合我的预期,除了Django选择在城市/摄影师与左外连接之间进行连接的某些原因.如果我抓取SQL文本并简单地将“left outer”更改为“inner”,则查询从~11秒变为200ms,结果相同.
我已经尝试在注释前面添加一个过滤器来暗示Django它应该是内部连接,但这不起作用.
任何Django查询巫毒我可以执行此操作以获得内部联接?我意识到我可以使用直接SQL,但更愿意通过ORM.
解决方法:
默认情况下,会生成LEFT JOIN,以便Django甚至可以为没有摄影师的城市提供行.如果你知道你不想要那些,这里有一个强制Django生成INNER JOIN的技巧:
City.objects.filter(
photographer__isnull=False
).annotate(
photographer_count=aggregates.Count('photographers')
).filter(
photographer_count__gt=0
).order_by(
'-photographer_count'
)
具体来说,第一个过滤器告诉Django INNER JOIN是安全的.它必须在annotate()调用之前.
内容总结
以上是互联网集市为您收集整理的python – 为Django Query强制INNER JOIN全部内容,希望文章能够帮你解决python – 为Django Query强制INNER JOIN所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。