Сопоставление Middle Django ORM и N+1 обновлено

Методы QuerySet и их назначение

Вопрос

Сопоставьте метод QuerySet и его назначение.

Попробуйте сами

Нажмите слева, потом подходящее справа.

Показать ответ и разбор

Коротко

annotate возвращает QuerySet с дополнительным полем у каждого объекта, aggregate сразу выполняет запрос и возвращает словарь. only загружает часть колонок, обращение к остальным вызовет дополнительный запрос на объект, это тоже может дать N+1.

Правильные пары

select_related
JOIN для связи «к одному»
prefetch_related
Отдельный запрос для связи «ко многим»
annotate
Добавить вычисляемое поле к каждой строке
aggregate
Вернуть словарь итогов по всей выборке
select_for_update
Заблокировать строки до конца транзакции
only
Загрузить только указанные колонки

Разбор

annotate возвращает QuerySet с дополнительным полем у каждого объекта, aggregate сразу выполняет запрос и возвращает словарь. only загружает часть колонок, обращение к остальным вызовет дополнительный запрос на объект, это тоже может дать N+1.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.