金字塔/SQLAlchemy DetachedInstanceError

4

我正在尝试使用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个回答

14
错误是由于模型对象(user)由会话(DbSession)管理。当您将实例存储在会话中(request.session),然后在另一个请求中再次访问它时,这使用了不同的DbSession。可以支持在会话之间移动管理的对象,但不是自动的。从request.session检索对象时,您可以通过user = DbSession.merge(user)将其合并到新的DbSession中。 http://docs.sqlalchemy.org/en/latest/orm/session.html?highlight=merge#merging

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接