Встречается на собеседованиях • сегодня
В чем разница между prefetch_related() и select_related()
prefetch_related() и select_related() в Django оптимизируют запросы к БД, но работают по-разному:
select_related()использует SQL JOIN для загрузки связанных объектов (ForeignKey, OneToOne) в одном запросе. Подходит для "один-ко-многим" и "один-к-одному".
Пример:
python
# 1 SQL запрос вместо N+1
book = Book.objects.select_related('author').get(id=1)
print(book.author.name) # Не требует доп. запросаprefetch_related()делает отдельный запрос для каждой связи (ManyToMany, reverse ForeignKey) и объединяет данные в Python. Подходит для "многие-ко-многим".
Пример:
python
# 2 запроса: для книг и их жанров
books = Book.objects.prefetch_related('genres').all()
for book in books:
print(book.genres.all()) # Не требует доп. запросовКлючевое отличие: select_related - JOIN на уровне SQL, prefetch_related - отдельные запросы + объединение в Python.

Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
офферы быстрее!
Попробовать бесплатно
Следующий вопрос
Это единственный вопрос по вашему фильтру
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы