python - 如何在没有 count() 的情况下计算查询集中的项目数

标签 python django

我想计算查询集中返回的项目数。例如

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.

Source

因此,如果您调用 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/

相关文章:

python - 推文错误: Failed to parse JSON payload:

python - 效率与可读性 : obfuscation when using nested boolean index arrays

python - 在 OS X Mavericks 上启动 Django 项目时出现问题

django - (Django) 每次我使用 South 迁移时,我都会收到有关 Fixtures/initial_data.json 的错误

python - 了解 Ubuntu 上的 Django 版本

python - 如何将整数迭代 append 到 python 中的字符串中?

python - 测试 AWS Elastic Beanstalk 扩展

python只读类属性

Python Django - 通过 ListView 更新 booleanField

django - 配置不正确 ("The SECRET_KEY setting must not be empty.")