Инструменты для облегчения выполнения необработанного SQL с Django ORM - PullRequest
2 голосов
/ 06 марта 2009

Мне часто нужно выполнять пользовательские sql-запросы в django, и ручное преобразование результатов запросов в объекты каждый раз довольно болезненно. Интересно, как с этим связаны бездельники. Может быть, кто-то написал какую-то библиотеку для помощи в работе с пользовательским SQL в Django?

Ответы [ 3 ]

4 голосов
/ 20 апреля 2010

В последней версии для разработчиков (в будущем 1.2) есть метод .raw (), который поможет вам в этом:

Person.objects.raw('SELECT * FROM myapp_person')

Более подробную информацию можно найти под http://docs.djangoproject.com/en/dev/topics/db/sql/.

4 голосов
/ 06 марта 2009

Не совсем уверен, что вы ищете, но вы всегда можете добавить метод в модель для выполнения пользовательского SQL для документов :

def my_custom_sql(self):
  from django.db import connection
  cursor = connection.cursor()
  cursor.execute("SELECT foo FROM bar WHERE baz = %s", [self.baz])
  row = cursor.fetchone()
  return row

Для чего-то более общего, создайте абстрактную базовую модель , которая определяет функцию, подобную этой, с параметром "sql".

3 голосов
/ 06 марта 2009

Поскольку проблема заключается в «ручном преобразовании результатов запроса в объекты», наиболее простым решением часто является выяснение, может ли ваш пользовательский SQL вписаться в вызов ORM .extra (), а не в запрос на чистом SQL. Часто это возможно, и тогда вы позволяете ORM выполнять всю работу по созданию объектов, как обычно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...