【问题标题】:Pyramid / SQL Alchemy DetachedInstanceErrorPyramid / SQL Alchemy DetachedInstanceError
【发布时间】:2012-03-31 02:05:36
【问题描述】:

我正在尝试使用 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实例的修改引起的。我该如何解决?

提前致谢,伊万。

【问题讨论】:

    标签: python sqlalchemy pyramid


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2011-09-13
      • 1970-01-01
      • 2014-03-31
      • 1970-01-01
      • 2022-10-02
      • 2021-09-29
      • 2018-11-24
      • 2014-09-17
      • 1970-01-01
      相关资源
      最近更新 更多