Django:如何从raw创建一个查询集?

时间:2015-04-10 10:07:08

标签: python django django-models django-queryset

我有一个查询,使用filter()extra()使用Django约定似乎很难。通过这种方式,我认为执行原始SQL查询并将其转换为查询集对我来说是一个更好的解决方案。

因此我开始搜索如何执行原始SQL查询以及如何从raw创建查询集。

我从CaryMRobbins找到了将原始转换为查询集的解决方案。所以我决定把它放在models.py

from django.db import connection, models

class MyManager(Manager):

def raw_as_qs(self, raw_query, params=()):
"""Execute a raw query and return a QuerySet. The first column in the
result set must be the id field for the model.
:type raw_query: str | unicode
:type params: tuple[T] | dict[str | unicode, T]
:rtype: django.db.models.query.QuerySet
"""
  cursor = connection.cursor()
  try:
    cursor.execute(raw_query, params)
    return self.filter(id__in=(x[0] for x in cursor))
  finally:
    cursor.close()

class MyModel(models.Model):
  objects = MyManager()

但它似乎无法正常工作,因为它返回一个空的查询集。

views.py我添加以下脚本:

raw =  ''' My huge 
           query working'''
queryset = MyModel.objects.raw_as_qs(raw)
print queryset # result is empty list : []

遵循这种方法我缺少什么?

我很难理解return self.filter(id__in=(x[0] for x in cursor))如何转换为qs。

0 个答案:

没有答案