Метод raw
Метод raw применяется к менеджеру модели и выполняет сырой SQL-запрос, возвращая экземпляр RawQuerySet, который ведет себя как обычный QuerySet. Это позволяет выполнять сложные запросы, которые невозможно выразить с помощью ORM. Первый аргумент - строка SQL-запроса, второй - список параметров для подстановки в запрос, третий - словарь параметров для подстановки по именам.
Синтаксис
Model.objects.raw(raw_query, params=None, translations=None)
Пример
Давайте выполним простой сырой запрос для получения всех статей из базы данных:
from myapp.models import Article
raw_query = "SELECT * FROM myapp_article"
res = Article.objects.raw(raw_query)
for article in res:
print(article.title)
Результат выполнения кода:
"article 1"
"article 2"
"article 3"
Пример
Давайте выполним запрос с параметрами, чтобы получить статьи по статусу:
from 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)
Результат выполнения кода:
"article 1"
"article 2"
Пример
Давайте используем именованные параметры для подстановки значений в запрос:
from 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)
Результат выполнения кода:
"article 1"
"article 2"