繁体   English   中英

使用 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?

如果您查看 django 的有关When Querysets Are Evaluated的文档

你会看到一些关于计数的信息......

注意:如果您只需要确定集合中的记录数(而不需要实际对象),则使用 SQL 的 SELECT COUNT(*) 在数据库级别处理计数会更有效。 Django 正是出于这个原因提供了一个 count() 方法。

所以count()不会评估集合,而len()会。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM