【问题标题】:Get number of results from Django's raw() query function从 Django 的 raw() 查询函数中获取结果数量
【发布时间】:2011-03-03 12:15:00
【问题描述】:

我正在使用原始查询,但无法找出如何获取它返回的结果数量。有什么办法吗?

编辑

.count() 不起作用。它返回:'RawQuerySet' 对象没有属性'count'

【问题讨论】:

标签: python django django-orm


【解决方案1】:

我猜你说的是raw() queryset 方法。这会返回一个查询集,就像任何其他查询集一样。因此,您当然可以调用.count(),就像处理任何其他 ORM 查询一样。

编辑 显示当您不检查时会发生什么。正如您所注意到的,.raw() 返回一个 RawQuerySet,它没有计数方法——它也不支持len()。获取长度的唯一方法是遍历查询集并计算它们:

sum(1 for result in results)

【讨论】:

  • 我试过了。我得到:'RawQuerySet' 对象没有属性'count'
  • 我认为没有方法。非常感谢。
  • 这会强制对查询进行评估吗?
【解决方案2】:

您也可以先将其转换为列表以获取长度,如下所示:

results = ModelName.objects.raw("select * from modelnames_modelname")
len(list(results))  #returns length

如果您还想在模板中获得 RawQuerySet 中条目的长度甚至是否存在,则需要这样做。只需像上面一样预先计算长度,并将其作为参数传递给模板。

【讨论】:

  • 这会强制对查询进行评估,不是吗?如果你只想要计数,这很昂贵。
  • 正如@SK9 所说:这太贵了。
【解决方案3】:

Count Works on RawQuerySet

ModelName.objects.raw("select 1 作为 id , COUNT(*) from modelnames_modelname")

【讨论】:

    猜你喜欢
    • 2013-12-18
    • 1970-01-01
    • 2010-12-22
    • 2017-04-25
    • 1970-01-01
    • 2012-09-10
    • 2023-03-19
    • 2015-03-21
    • 1970-01-01
    相关资源
    最近更新 更多