我想计算查询集中返回的项目数.例如
userdesigns = Design.objects.filter (desadder = user.id)
我想在不使用count()的情况下获取返回的对象数.
其原因是,我试图加速性能,并减少我执行数据库查询的号码,我注意到,使用count()执行ping数据库,这是我不想要的.考虑到我已经提取了用户设计的完整提示,是否应该只计算返回的查询集中存储的项目数?
Pav*_*hov 19
len().在您上面调用len()时会评估QuerySet.正如您所料,这会返回结果列表的长度.
注意:如果您只想确定集合中的记录数,请不要在QuerySets上使用len().使用SQL的SELECT COUNT(*)来处理数据库级别的计数效率要高得多,而Django正是因为这个原因提供了count()方法.见下面的count().
因此,如果您调用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>
>>>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21413 次 |
| 最近记录: |