Выбор ответа Junior SQLAlchemy 2.0 спрашивают часто обновлено
Ленивая загрузка связей
Вопрос
Как по умолчанию загружается связь user.orders, объявленная через relationship()?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Лениво: отдельный SELECT при первом обращении. Стратегия по умолчанию lazy="select": связь не грузится, пока к ней не обратились, а потом выполняется отдельный запрос.
Варианты ответа
- JOIN в основном запросе при загрузке пользователя
- Никак: связь пустая, пока не вызвать
session.load() - При старте приложения для всех пользователей разом
- Лениво: отдельный SELECT при первом обращенииправильный ответ
Разбор
Стратегия по умолчанию lazy="select": связь не грузится, пока к ней не обратились, а потом выполняется отдельный запрос. В цикле по пользователям это даёт N+1. Стратегию меняют в relationship(lazy=...) или, лучше, в конкретном запросе через .options(selectinload(...)).
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.