Middle
36
Kada u Django ORM-u praviš upite sa povezanim modelima, kako izbegavaš suvišne SQL upite? Koja dva ORM mehanizma poznaješ?
Компаније где су питане
BP
Одговор од АИ
sobes.tech АИ
В 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)
Использование этих методов значительно снижает количество запросов и повышает производительность.