获取Django raw()查询函数的结果数量

10 投票
3 回答
11830 浏览
提问于 2025-04-15 23:56

我在使用原始查询的时候,遇到了一些麻烦,想知道怎么才能得到它返回的结果数量。有没有什么办法呢?

补充说明

.count() 这个方法不管用,它返回的信息是:'RawQuerySet' 对象没有 'count' 这个属性。

3 个回答

2

在原始查询集上进行计数

 

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

16

你也可以先把它转换成一个列表,这样就能得到长度,方法如下:

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

如果你想在模板中查看 RawQuerySet 的长度或者里面是否有内容,这样做是必要的。就像上面那样先计算好长度,然后把它作为参数传递给模板。

12

我想你是在说 raw() 这个查询集方法。它返回的查询集和其他的查询集一样。所以当然可以像对待其他ORM查询那样调用 .count()

编辑 这段话说明了不检查会发生什么。正如你所提到的,.raw() 返回的是一个 RawQuerySet,它没有 count 方法,也不支持 len()。获取长度的唯一方法是遍历这个查询集并手动计数:

sum(1 for result in results)

撰写回答