Pyramid/SQL Alchemy DetachedInstanceError

Iva*_*mov 4 python sqlalchemy pyramid

我正在尝试使用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))
Run Code Online (Sandbox Code Playgroud)

当我尝试self.request.session['user']从另一个处理程序获取变量时,我得到一个DetachedInstanceError: Instance <User at 0x42902f0> is not bound to a Session; attribute refresh operation cannot proceed.据我所知,由于User实例的修改,引发了这个错误.我该如何解决?

提前谢谢,伊万.

Mic*_*kel 15

错误是因为模型对象(user)由session(DbSession)管理.当您将实例存储在session(request.session)中,然后在另一个请求中再次访问它时,这是使用不同的DbSession.支持在会话之间移动托管对象,但不支持自动.从中检索对象时request.session,可以将其合并到新的DbSessionvia中user = DbSession.merge(user).

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