Пропуски Middle SQLAlchemy 2.0 обновлено

Запрос с eager-загрузкой в async

Вопрос

Допишите запрос: пользователи с их заказами (коллекция) одним дополнительным запросом, в асинхронной сессии.

stmt = (
    __(1)__(User)
    .where(User.is_active.is_(True))
    .options(__(2)__(User.orders))
)
users = (await session.__(3)__(stmt)).all()

Попробуйте сами

Заполните пропуски по номерам.

1
2
3
Показать ответ и разбор

Коротко

select(User) строит запрос, selectinload загружает коллекцию вторым запросом с IN, а session.scalars возвращает объекты User. В async ленивая загрузка не работает, поэтому связь грузится заранее.

Что в пропусках

1

select

2

selectinload

3

scalars

Разбор

select(User) строит запрос, selectinload загружает коллекцию вторым запросом с IN, а session.scalars возвращает объекты User. В async ленивая загрузка не работает, поэтому связь грузится заранее.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме