Назад к вопросам
Middle
5
Когда в Django ORM ты делаешь запросы со связанными моделями, как ты избегаешь лишних SQL-запросов? Какие два механизма ORM ты знаешь?
Компании, где спрашивали
BP
Ответ от нейросети
sobes.tech AI
В Django ORM для избежания лишних SQL-запросов при работе со связанными моделями используются два основных механизма:
-
select_related — выполняет SQL JOIN и загружает связанные объекты в том же запросе. Работает для ForeignKey и OneToOne полей.
-
prefetch_related — выполняет отдельный запрос для связанных объектов и связывает их в Python. Подходит для ManyToMany и обратных связей.
Пример:
# Без оптимизации
books = Book.objects.all()
for book in books:
print(book.author.name) # для каждого book будет отдельный запрос к author
# С select_related
books = Book.objects.select_related('author').all()
for book in books:
print(book.author.name) # один запрос с JOIN
# С prefetch_related для ManyToMany
books = Book.objects.prefetch_related('tags').all()
for book in books:
for tag in book.tags.all():
print(tag.name)
Использование этих методов значительно снижает количество запросов и повышает производительность.