Вступить в клуб →
средняявопросPostgreSQL, ORM и оптимизация запросов

Обращение к позициям заказа после выхода из сессии SQLAlchemy падает с ошибкой

def get_order(order_id):
    with Session(engine) as session:
        return session.get(Order, order_id)

order = get_order(17)
print(order.status)          # работает
print(len(order.items))      # DetachedInstanceError

items — связь «один ко многим» с ленивой загрузкой по умолчанию. Почему первая строка работает, а вторая падает, и как правильно?

  • items грузится отдельным запросом при обращении, а сессия уже закрыта
  • status хранится в кэше Python, а items — только в базе
  • session.get не загружает связанные объекты, их нельзя получить никак
  • len() нельзя вызывать у коллекций ORM, нужно items.count()

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела