Проблема с SqlAlchemy - «Родительский экземпляр <SomeClass>не привязан к сеансу; операция отложенной загрузки ...» - PullRequest
8 голосов
/ 23 ноября 2010

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

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

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

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

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

Есть идеи?

1 Ответ

9 голосов
/ 20 мая 2011

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...