我想计算查询集中返回的项目数。例如
userdesigns = Design.objects.filter (desadder = user.id)
我想不使用 count() 获取返回的对象数。
原因是我试图提高性能并减少我执行的数据库查询的数量,我注意到使用 count() 会 ping 数据库,这是我不想要的。考虑到我已经提取了完整的 userdesigns,难道不应该有一种方法可以只计算返回的查询集中存储的项目数吗?
最佳答案
len(). A QuerySet is evaluated when you call len() on it. This, as you might expect, returns the length of the result list.
Note: Don't use len() on QuerySets if all you want to do is determine the number of records in the set. It's much more efficient to handle a count at the database level, using SQL's SELECT COUNT(*), and Django provides a count() method for precisely this reason. See count() below.
因此,如果您调用 len(userdesigns)
而不是 userdesigns.count()
,django 将在单个查询中请求表中的所有相关数据。之后您可以访问 userdesigns
变量的所有项目,不会进行额外的查询。
>>> m = Model1.objects.filter(desadder=1)
>>> len(m)
(0.000) SELECT "app1_model1"."id", "app1_model1"."desadder", "app1_model1"."test" FROM "app1_model1" WHERE "app1_model1"."desadder" = 1 ; args=(1,)
2
>>> m[0]
<Model1: Model1 object>
>>> m = Model1.objects.filter(desadder=1)
>>> len(m)
(0.000) SELECT "app1_model1"."id", "app1_model1"."desadder", "app1_model1"."test" FROM "app1_model1" WHERE "app1_model1"."desadder" = 1 ; args=(1,)
2
>>> m[0]
<Model1: Model1 object>
>>>
关于python - 如何在没有 count() 的情况下计算查询集中的项目数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11377856/