gpt4 book ai didi

python - 具有 '__in' 过滤器性能的 Django ORM values_list

转载 作者:太空狗 更新时间:2023-10-30 01:46:30 24 4
gpt4 key购买 nike

在 Django 中使用“__in”过滤查询集的首选方法是什么?

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

providers_ids = Provider.objects.filter(age__gt=10).values_list('id', flat=True)
consumers = Consumer.objects.filter(consumer__in=providers_ids)

最佳答案

这些应该是完全等价的。在底层,Django 会将这两个优化为 SQL 中的子选择查询。查看QuerySet API reference on in :

此查询集将被评估为子选择语句:

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

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

providers_ids = list(Provider.objects.filter(age__gt=10).values_list('id', flat=True))
consumers = Consumer.objects.filter(consumer__in=providers_ids)

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

关于python - 具有 '__in' 过滤器性能的 Django ORM values_list,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26411411/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com