Pyramid / SQL Alchemy DetachedInstanceError - PullRequest
4 голосов
/ 14 марта 2012

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

   user = DbSession.query(User).filter_by(email=email).one()     
   if user.approved:
       return {'msg': _('Already approved')}        
   if user.check_approve_token(hash):
       user.approved = True
       self.request.session.save()
       self.request.session['user'] = user
       return HTTPFound(self.request.route_url('home'),
                            headers=remember(self.request, user.guid))

Когда я пытаюсь получить переменную self.request.session['user'] из другого обработчика, я получаю DetachedInstanceError: Instance <User at 0x42902f0> is not bound to a Session; attribute refresh operation cannot proceed.Насколько я понимаю, эта ошибка возникла из-за модификации User экземпляра.Как это исправить?

Заранее спасибо, Иван.

1 Ответ

15 голосов
/ 14 марта 2012

Ошибка в том, что объектами модели (user) управляет сеанс (DbSession).Когда вы сохраняете экземпляр в сеансе (request.session), а затем снова получаете доступ к нему в другом запросе, используется другой DbSession.Перемещение управляемого объекта между сеансами поддерживается, но не автоматически.При извлечении объекта из request.session вы можете объединить его с вашим новым DbSession через user = DbSession.merge(user).

http://docs.sqlalchemy.org/en/latest/orm/session.html?highlight=merge#merging

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