当前位置: 首页 > 面试题库 >

在Django QuerySet上计算vs len

严易安
2023-03-14
问题内容

在Django中,假设我QuerySet要遍历并打印结果,那么计算对象的最佳选择是什么?len(qs)还是qs.count()

(此外,考虑到在同一迭代中对对象进行计数也不是一个选择。)


问题答案:

尽管Django文档建议使用count而不是len

注意:len()如果要确定的是记录集中的记录数,请不要在QuerySet上使用。使用SQL的在数据库级别处理计数效率更高SELECT COUNT(*),而Djangocount()为此提供了一种方法。

由于无论如何都要迭代此QuerySet,结果将被缓存(除非使用iterator),因此最好使用len,因为
这样可以避免再次访问数据库,也可以避免获取不同数量的结果 !) 。
如果您使用iterator,则出于相同的原因,我建议您在遍历(而不是使用count)时包括一个计数变量。



 类似资料:
  • 我刚刚下载了用于Linux的nifi-0.5.1。 我很感激你的帮助,

  • 我在配置中错过了什么? “无限”复选框需要勾选还是不勾选?

  • 问题内容: 我如何使用JPA条件API执行以下操作: 使用CriteriaBuilder.countDistinct在一个列/路径上执行此操作很简单,但是如何在两个路径/列上执行此操作? 问题答案: 这是一个较晚的答案:-)尽管我不确定情况是否有所改变。 最近,我遇到了非常相同的需求,并使用concat解决了该需求,即通过将列连接为 伪列 ,然后将其连接到 伪列 上。 但是我不能使用,因为它生成了

  • 问题内容: 我有一个python代码在名为A的远程计算机上进行一些计算。我通过名为B的计算机通过A连接到A。是否可以在B的计算机上显示图形? 问题答案: 如果在远程计算机(B)上的Mac OS X上使用matplotlib,则必须首先确保使用基于X11的显示后端之一,因为本机Mac OS X后端无法将其图导出到另一个显示。选择后端可以通过 可以通过提供不正确的后端名称来获得受支持的后端列表:mat

  • 在阅读了这个问题的答案之后,我试着将其放在中。启动(使用),我尝试了别名。他们没有被认出来。 我想知道如何在全局和虚拟环境中设置。