django-在模板中显示查询集的长度
在html文件中,如何输出正在使用的查询集的大小(用于调试目的) 我试过了django-在模板中显示查询集的长度,django,Django,在html文件中,如何输出正在使用的查询集的大小(用于调试目的) 我试过了 {{ len(some_queryset) }} 但那没用。格式是什么?尝试一下{{some_queryset.count} 这比使用len(可以通过{some\u queryset.\uu len\uqueryset}调用len)要好,因为它优化了后台生成的SQL,只检索记录的数量,而不是记录本身。模板中的some\u queryset.count()或{some\u queryset.count} 不要使用len,
{{ len(some_queryset) }}
但那没用。格式是什么?尝试一下
{{some_queryset.count}
这比使用len(可以通过{some\u queryset.\uu len\uqueryset}
调用len)要好,因为它优化了后台生成的SQL,只检索记录的数量,而不是记录本身。模板中的some\u queryset.count()
或{some\u queryset.count}
不要使用len
,它的效率要低得多。数据库应该正在做这项工作。请参阅有关的文档
然而,考虑到buffer的建议,如果您计划无论如何迭代记录,您最好使用
len
,这将涉及解析查询集并使生成的行驻留在主内存中-这不会浪费时间,因为您无论如何都会访问这些行。根据数据库连接延迟的不同,它实际上可能更快,但您应该始终进行测量。只需突出上面的@Yuji'Tomita'Tomita comment作为一个单独的答案:
有一个名为
length
的过滤器可以对任何对象调用len()
因此,您可以使用:
{{ some_queryset|length }}
公认的答案并不完全正确。您是否应该使用len()(或模板中的长度过滤器)vs count(),取决于您的用例
如果查询集仅用于计算行数,请使用count()
如果查询集在其他地方使用,即在循环中使用,请使用len()或| length。这里使用count()将发出另一个SELECT查询来计算行数,而len()只计算查询集中缓存结果的数量
从:
请注意,如果您想要查询集中的项数,并且还从中检索模型实例(例如,通过对其进行迭代),那么使用len(QuerySet)可能会更有效,因为len(QuerySet)不会像count()那样导致额外的数据库查询
虽然似乎对于已经使用prefetch_related()加载的相关对象,您可以安全地使用count(),Django将足够聪明地使用缓存的数据,而不是执行另一个SELECT查询。有一个名为length
的过滤器,可以对任何对象调用len()<代码>{any|iterable|length}
@Yuji'Tomita'Tomita所以你用了一些查询集。全部| length
?就生成的SQL而言,这是最优的吗?some\u queryset.count
使用SELECT count(*)
。。。而不是选择所有模型字段。我不知道这在性能方面有多重要,我想对于具有大型查询集的东西来说,这可能很重要?@AJP是的。如果您只获得计数,那么请执行一些\u queryset.count。如果已经对其进行了评估,| length可以为您节省db命中率。谢谢@Yuji'Tomita'Tomita'Tomita过滤器的“length”如何?是一样的吗?不一样!您确实应该使用length,检查我的答案:到目前为止,django不允许在模板中使用\uuu len\uuuu
。仅供参考,每次连续调用模板中的{some_queryset.count}
,都将发出另一个DB调用。如果这是一个会多次显示的值,请将该值存储在视图中并传递给模板。不要使用len,它的效率要低得多。
:除非您仍要迭代查询集。在这种情况下,宁愿选择len
而不是count
。