Проблема с SqlAlchemy – «Родительский экземпляр <SomeClass> не привязан к сеансу; ленивая загрузка … "

У меня есть небольшой бережливый сервер на питоне, который я использую, чтобы быстро найти. Сервер запрашивает mysql через SqlAlchemy по первому запросу и перетаскивает все возвращенные объекты в словарь, поэтому при последующих запросах не требуется вызов БД. Я просто получаю объект от dict и затем вызываю некоторые из методов объектов, необходимых для обеспечения правильного ответа.

Первоначально все в порядке. Однако после того, как сервер работает некоторое время, я получаю это исключение при доступе к методам объектов sqlalchemy:

Родительский экземпляр не связан с сеансом; ленивая загрузка атрибута «rate» не может продолжаться.

Странно, потому что я устанавливаю eagerload('rate') .

Я не могу увидеть шаблон такого поведения, он влияет только на некоторые объекты. Однако, как только он влияет на объект, он будет продолжать делать это при каждом запросе, пока я не перезапущу свой сервер python.

Есть идеи?

Вероятно, вы кешируете объекты между запросами, а когда происходит фиксация, объект сеанса очищается, аннулирует ваши объекты. Если вы запускаете свой сервер через какой-то многопоточный веб-сервер, который при необходимости запускает работников, это объясняет, почему нет шаблона. Если вы не хотите получить нижнюю часть этого и просто нужно быстро исправить, это всегда будет работать:

 if obj not in session: obj = session.query(ObjClass).get(obj.id) 

Правильным решением было бы убедиться, что вы не кэшируете объекты между запросами.