Django ORM values_list with''uuu in'filter performan

2024-10-01 13:35:19 发布

您现在位置:Python中文网/ 问答频道 /正文

在Django中使用''uuqin'过滤查询集的首选方法是什么?在

providers = Provider.objects.filter(age__gt=10)
consumers = Consumer.objects.filter(consumer__in=providers)

或者

^{pr2}$

Tags: django方法ingtageobjectsconsumerfilter
2条回答

我同意野鸭子的说法。不过,有几句话

您可以将这样的过滤器组合成这样的过滤器:

consumers = Consumer.objects.filter(consumer__age__gt=10)

这将在单个查询中为您提供相同的结果集。在

第二件事,要分析生成的查询,可以在末尾使用.query子句。在

示例:

^{pr2}$

将打印ORM为获取resultset而生成的查询。在

这些应该完全相同。在幕后,Django将把这两个优化为SQL中的一个subselect查询。参见QuerySet API reference on ^{}

此查询集将作为subselect语句进行计算:

SELECT ... WHERE consumer.id IN (SELECT id FROM ... WHERE _ IN _)

但是,您可以通过在values_list上调用list来强制基于传递主键显式值的查找,如下所示:

^{pr2}$

在某些情况下,这可能会更有效,例如,当您只有很少的提供者时,但这将完全取决于您的数据是什么样的以及您使用的是什么数据库。请参阅上面链接中的“性能注意事项”注释。在

相关问题 更多 >