使用 Django 选择不在另一个表中的值
Posted
技术标签:
【中文标题】使用 Django 选择不在另一个表中的值【英文标题】:Select values which not in another table with Django 【发布时间】:2012-12-15 20:27:54 【问题描述】:如何将这个 SQL 查询转换为 Django ORM 语句?
SELECT field1, field2, field3
FROM table1
WHERE field1 NOT IN
(SELECT 2_field1 FROM table2);
请帮忙! :)
pstable1
和 table2
不受 ForeignKey
或 ManyToMany
的限制
【问题讨论】:
如果记录太多,在原始方法中使用该查询会导致管道损坏 【参考方案1】:使用两个QuerySet,如图in the docs。
inner_qs = table2.objects.all()
results = table1.objects.exclude(field1__in=inner_qs)
【讨论】:
感谢您的链接,永远不要使用 API 到达页面的这一部分 :) 但是 - 这种方法效率不高。在我的情况下,通过 Django 的原始 SQL 需要 0.5 秒(包括fetchall()
),嵌套查询的方法需要 5 秒
我经常发现原始 sql 对于这样的事情要快得多……尤其是如果 inner_qs 很大……但是如果有的话,可能有一种方法可以与原始 sql 等效是不是我没找到...
略有改进;在某些情况下,这会有所不同:inner_qs = table2.objects.values_list('field1',flat=True) results = table1.objects.exclude(field1__in=inner_qs)
虽然,如果您想更快地进行查询,您应该使用 QuerySet 方法raw()
。以上是关于使用 Django 选择不在另一个表中的值的主要内容,如果未能解决你的问题,请参考以下文章
从一个表中选择一个逗号分隔的值,并使用 SQL Server 中的函数在另一个表中的 where 条件中使用它