Sobes.tech
Middle
45

Lorsque vous effectuez des requêtes avec des modèles liés dans Django ORM, comment évitez-vous les requêtes SQL inutiles ? Quels sont les deux mécanismes ORM que vous connaissez ?

Entreprises à qui on a demandé
BP

Réponse de l'IA

sobes.tech IA

В Django ORM для избежания лишних SQL-запросов при работе со связанными моделями используются два основных механизма:

  1. select_related — выполняет SQL JOIN и загружает связанные объекты в том же запросе. Работает для ForeignKey и OneToOne полей.

  2. 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)

Использование этих методов значительно снижает количество запросов и повышает производительность.