Вопрос про QuerySet. Сколько раз выполняется запрос в БД?

Рейтинг: 0Ответов: 1Опубликовано: 03.03.2023
query1 = Model.objects.all()
query2 = query1.exclude(id=17)
query3 = query1.distinct()

Сколько раз выполнится запрос в базу данных?

Ответы

▲ 4Принят

Могу ошибаться, так как именно с django и его orm я не работал.

Но, кажется, в данном куске кода запросов к базе вообще не выполнится.

В документации читаю:

Внутренне QuerySet может быть создан, отфильтрован, нарезан и, как правило, передан без фактического запроса к базе данных. На самом деле никаких действий с базой данных не происходит, пока вы не сделаете что-то для оценки набора запросов.

Так как, согласно той же документации, все упомянутые в вашем коде методы возвращают новый QuerySet и никак не обращаются к результату его выполнения, я делаю вывод, что реального запроса к базе не будет произведено.

Запрос будет выполнен, только когда вы начнёте как-то работать с результатом, например, сделав list(query3)