获取Django raw()查询函数的结果数量
我在使用原始查询的时候,遇到了一些麻烦,想知道怎么才能得到它返回的结果数量。有没有什么办法呢?
补充说明
.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)