gpt4 book ai didi

python - 将 any 与 QuerySet 一起使用不是最优的吗?

转载 作者:行者123 更新时间:2023-12-02 01:43:01 24 4
gpt4 key购买 nike

很多时候,需要检查 QuerySet 中是否至少有一个元素。大多数情况下,我使用 exists :

if queryset.exists():
...

但是,我看到同事使用 python 的 any功能:

if any(queryset):
...

是否使用 python 的 any 函数不是最优的?

我的直觉告诉我,这是一个与 between using count and len 类似的困境。 : any 将遍历 QuerySet,因此需要对其求值。在我们将使用 QuerySet 项的情况下,这不会造成任何减速。但是,如果我们只需要检查是否存在任何满足查询的数据,这可能会加载我们不需要的数据。

最佳答案

Is using python's any function unoptimal?

最 Pythonic 的方式是:

if <strong>queryset</strong>:
# …

事实上,QuerySet 具有真实性 如果它包含至少一项,则为True,否则为False

如果您稍后想要枚举查询集(例如使用 for 循环),如果您检查其真实性,它将加载缓存中的项目,例如:

if queryset:
for item in queryset:
# …

只会对数据库进行一个查询:当您检查if queryset 时,该查询将获取所有项目,然后您可以重用该缓存而无需进行第二个查询。

如果您在稍后的过程中使用查询集,那么您可以使用 .exists() [Django-doc] : 这将不会将记录加载到内存中,而只会进行查询以检查是否至少存在一个这样的记录,因此就应用程序和数据库之间的带宽而言,这会降低成本。但是,如果您稍后必须使用查询集,使用 .exists() 不是一个好主意,因为那时我们会进行两个查询。

然而,使用 any(queryset) 是没有意义的:您可以通过其真实性来检查查询集是否包含元素,因此使用 any() 通常只会使检查稍微效率较低。

关于python - 将 any 与 QuerySet 一起使用不是最优的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71326866/

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