【问题标题】:Django: Does .count() force the queryset evaluationDjango:.count() 是否强制查询集评估
【发布时间】:2020-11-04 12:12:14
【问题描述】:

我想传递一个查询集,该查询集涉及对函数进行计数,而无需立即调用数据库。例如,以下查询集是惰性的,并且在评估之前不会访问数据库:

queryset = MyModel.objects.all()

我从Django docs 知道len() 强制进行评估,但是count() 呢?这会立即访问数据库吗?

queryset = MyModel.objects.all().count()

编辑:我澄清了我的问题

【问题讨论】:

  • 非评估计数查询集”是什么意思?
  • 查询集的目的是什么?你能添加更多代码来描述你在做什么吗?

标签: django django-queryset django-orm django-database


【解决方案1】:

我希望这能回答您的问题。

count() 调用在幕后执行SELECT COUNT(*),所以你 应始终使用 count() 而不是将所有记录加载到 Python 对象并在结果上调用len()(除非您需要 无论如何将对象加载到内存中,在这种情况下 len() 将是 更快)。

请注意,如果您想要 QuerySet 中的项目数并且也是 从中检索模型实例(例如,通过迭代 它),使用len(queryset) 可能更有效,但不会 会导致像count() 这样的额外数据库查询。

https://docs.djangoproject.com/en/3.0/ref/models/querysets/#count

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-18
    • 1970-01-01
    • 2020-01-22
    相关资源
    最近更新 更多