2024-10-01 13:35:19 发布
网友
在Django中使用''uuqin'过滤查询集的首选方法是什么?在
providers = Provider.objects.filter(age__gt=10) consumers = Consumer.objects.filter(consumer__in=providers)
或者
我同意野鸭子的说法。不过,有几句话
您可以将这样的过滤器组合成这样的过滤器:
consumers = Consumer.objects.filter(consumer__age__gt=10)
这将在单个查询中为您提供相同的结果集。在
第二件事,要分析生成的查询,可以在末尾使用.query子句。在
.query
示例:
将打印ORM为获取resultset而生成的查询。在
这些应该完全相同。在幕后,Django将把这两个优化为SQL中的一个subselect查询。参见QuerySet API reference on ^{}:
此查询集将作为subselect语句进行计算:
SELECT ... WHERE consumer.id IN (SELECT id FROM ... WHERE _ IN _)
但是,您可以通过在values_list上调用list来强制基于传递主键显式值的查找,如下所示:
values_list
list
在某些情况下,这可能会更有效,例如,当您只有很少的提供者时,但这将完全取决于您的数据是什么样的以及您使用的是什么数据库。请参阅上面链接中的“性能注意事项”注释。在
我同意野鸭子的说法。不过,有几句话
您可以将这样的过滤器组合成这样的过滤器:
这将在单个查询中为您提供相同的结果集。在
第二件事,要分析生成的查询,可以在末尾使用
.query
子句。在示例:
^{pr2}$将打印ORM为获取resultset而生成的查询。在
这些应该完全相同。在幕后,Django将把这两个优化为SQL中的一个subselect查询。参见QuerySet API reference on ^{} :
此查询集将作为subselect语句进行计算:
但是,您可以通过在
^{pr2}$values_list
上调用list
来强制基于传递主键显式值的查找,如下所示:在某些情况下,这可能会更有效,例如,当您只有很少的提供者时,但这将完全取决于您的数据是什么样的以及您使用的是什么数据库。请参阅上面链接中的“性能注意事项”注释。在
相关问题 更多 >
编程相关推荐