如何在Django的RawQuerySet

时间:2015-06-16 03:13:00

标签: python django

我正在尝试使用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

4 个答案:

答案 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()