Встречается на собеседованиях • сегодня

В чем разница между 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.

Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы