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

Как решается проблема N+1 запросов в SQLAlchemy

Проблема N+1 запросов возникает, когда для каждой записи из основного запроса выполняется дополнительный запрос к связанным данным. В SQLAlchemy это решается с помощью стратегий загрузки:

  1. joinedload() - загружает связанные данные одним JOIN-запросом:
python
from sqlalchemy.orm import joinedload
users = session.query(User).options(joinedload(User.addresses)).all()
  1. subqueryload() - использует подзапрос для загрузки связанных данных:
python
from sqlalchemy.orm import subqueryload
users = session.query(User).options(subqueryload(User.addresses)).all()
  1. selectinload() (рекомендуется) - загружает связанные данные отдельным запросом с IN-условием:
python
from sqlalchemy.orm import selectinload
users = session.query(User).options(selectinload(User.addresses)).all()

Для глобальной настройки можно использовать параметр lazy в relationship:

python
addresses = relationship("Address", lazy="selectin")
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

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

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

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