Middle
47
Kad Django ORM veic vaicājumus ar saistītajiem modeļiem, kā izvairies no liekām SQL vaicājumiem? Kādus divus ORM mehānismus tu zini?
Uzņēmumi, kur jautāja
BP
Atbilde no AI
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)
Использование этих методов значительно снижает количество запросов и повышает производительность.