我正在尝试使用db表中的RawQuerySet获取记录数。
我不知道如何访问count(*)的值。
以下是我的尝试,
>>> q = Question.objects.raw('select count(*) from poll_Question')
>>> q[0]
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/django/db/models/query.py", line 1323, in __getitem__
return list(self)[k]
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/django/db/models/query.py", line 1296, in __iter__
raise InvalidQuery('Raw query must include the primary key')
django.db.models.query_utils.InvalidQuery: Raw query must include the primary key
答案 0 :(得分:1)
根据Django文档。
此方法接受原始SQL查询,执行它并返回一个 django.db.models.query.RawQuerySet实例。这个RawQuerySet实例 可以像普通的QuerySet一样迭代,以提供对象 实例
您可以改用光标。
cursor.execute('count query')
或者你可以这样做,注意这个方法非常无效,它做什么,它将所有poll_question加载到内存中然后执行计数操作。您必须在数据库中执行计数操作,数据库用于执行计数和求和等操作。
q = Question.objects.raw('select * from poll_Question')
print len(list(q))
答案 1 :(得分:1)
你可以尝试在你的SQL中包含id它可以正常工作
Question.objects.raw('select 1 as id , count(*) as total_polls from poll_Question')
答案 2 :(得分:0)
&#39;从poll_Question&#39;中选择count(id)可能会解决您的问题(假设id是主键)。
但是,为什么不使用Djangos ORM并调用PollQuestion.objects.count()?
答案 3 :(得分:0)
我相信你所需要的是:
Question.objects.count()