Метод raw

Метод raw применяется к менеджеру модели и выполняет сырой SQL-запрос, возвращая экземпляр RawQuerySet, который ведет себя как обычный QuerySet. Это позволяет выполнять сложные запросы, которые невозможно выразить с помощью ORM. Первый аргумент - строка SQL-запроса, второй - список параметров для подстановки в запрос, третий - словарь параметров для подстановки по именам.

Синтаксис

pythonModel.objects.raw(raw_query, params=None, translations=None)

Пример

Давайте выполним простой сырой запрос для получения всех статей из базы данных:

pythonfrom myapp.models import Article

raw_query = "SELECT * FROM myapp_article"
res = Article.objects.raw(raw_query)

for article in res:
  print(article.title)

Результат выполнения кода:

python"article 1"
"article 2"
"article 3"

Пример

Давайте выполним запрос с параметрами, чтобы получить статьи по статусу:

pythonfrom myapp.models import Article

raw_query = "SELECT * FROM myapp_article WHERE status = %s"
res = Article.objects.raw(raw_query, ['published'])

for article in res:
  print(article.title)

Результат выполнения кода:

python"article 1"
"article 2"

Пример

Давайте используем именованные параметры для подстановки значений в запрос:

pythonfrom myapp.models import Article

raw_query = "SELECT * FROM myapp_article WHERE status = %(status)s"
res = Article.objects.raw(raw_query, {'status': 'published'})

for article in res:
  print(article.title)

Результат выполнения кода:

python"article 1"
"article 2"

Смотрите также

  • метод filter,
    который фильтрует QuerySet с помощью ORM
  • метод extra,
    который добавляет дополнительные условия в SQL-запрос
  • метод values,
    который возвращает QuerySet словарей
  • метод only,
    который выбирает только указанные поля