我想传递一个查询集,该查询集涉及将行计数到一个函数而无需立即调用数据库。例如,以下查询集是惰性的,并且直到对其求值后才访问数据库:
queryset = MyModel.objects.all()
我从Django docs知道len()
会强制进行评估,但是count()
呢?这会立即击中数据库吗?
queryset = MyModel.objects.all().count()
编辑:我澄清了我的问题
答案 0 :(得分:0)
我希望这能回答您的查询。
count()
调用会在幕后执行SELECT COUNT(*)
,因此您 应该始终使用count()
而不是将所有记录加载到 Python对象并在结果上调用len()
(除非您需要 无论如何将对象加载到内存中,在这种情况下,len()
将是 更快)。请注意,如果要获得QuerySet中的项目数,还需要 从中检索模型实例(例如,通过遍历 它),使用
len(queryset)
可能会更有效,而使用count()
导致像const firstName= await page.$('[name=firstName]') expect(firstName!=null).equal(true)
这样的额外数据库查询。
https://docs.djangoproject.com/en/3.0/ref/models/querysets/#count