使用 queryset.count() 缓存查询集吗?
Do using queryset.count() caches the queryset?
我正在我的端点中进行一些过滤,只有当过滤的查询集超过 30 个项目时才应用其中一个过滤器。
yesterday_date = timezone.now() - timezone.timedelta(days=1)
if query_dict.get("active"):
active_query = cleaned_query.filter(created_at__gt=yesterday_date)
if active_query.count() > 30:
cleaned_query = active_query
else:
cleaned_query = cleaned_query[:30]
我的疑问是,.count() 方法是否已经评估并缓存了查询集,或者我应该使用 len(queryset) 来避免另一个数据库命中,以防它大于 30?
如果你查看有关 When Querysets Are Evaluated
的 django 文档
您会看到一些关于计数的信息...
Note: If you only need to determine the number of records in the set
(and don’t need the actual objects), it’s much more efficient to
handle a count at the database level using SQL’s SELECT COUNT(*).
Django provides a count() method for precisely this reason.
所以 count()
不计算集合,而 len()
计算集合。
我正在我的端点中进行一些过滤,只有当过滤的查询集超过 30 个项目时才应用其中一个过滤器。
yesterday_date = timezone.now() - timezone.timedelta(days=1)
if query_dict.get("active"):
active_query = cleaned_query.filter(created_at__gt=yesterday_date)
if active_query.count() > 30:
cleaned_query = active_query
else:
cleaned_query = cleaned_query[:30]
我的疑问是,.count() 方法是否已经评估并缓存了查询集,或者我应该使用 len(queryset) 来避免另一个数据库命中,以防它大于 30?
如果你查看有关 When Querysets Are Evaluated
的 django 文档您会看到一些关于计数的信息...
Note: If you only need to determine the number of records in the set (and don’t need the actual objects), it’s much more efficient to handle a count at the database level using SQL’s SELECT COUNT(*). Django provides a count() method for precisely this reason.
所以 count()
不计算集合,而 len()
计算集合。