配置WebApp2请求和响应。沿着它们创建和关闭会话对象

时间:2013-08-26 23:36:42

标签: sqlalchemy webapp2

我正在创建一个webapp2,SQLalchemy,基于postgresql的Web应用程序。

我的问题是:*每当请求到来时如何创建SQLAlchemy会话对象(scoped_session)并在发送响应时关闭同一对象。*

通过文档我理解这是创建和关闭会话对象的最佳方法。但是如何用WebApp2实现它我不确定。如果有人知道更好更有效的方式,请告诉我。

目前我在配置文件中创建了一个scoped_session obj,我导入了这个文件,并在需要的地方使用obj。我没有关闭任何我认为不是一个好习惯的对象。我想要实现的是每当有来自浏览器的请求时,我得到一个新的会话对象,使用该会话对象与数据库交互,并在返回响应时关闭会话对象。

由于

1 个答案:

答案 0 :(得分:0)

Overriding dispatch()似乎是要走的路:

class MyHandler(webapp2.RequestHandler):
    def dispatch(self):
        try:
            ret = webapp2.RequestHandler.dispatch(self)
            Session().commit()
            return ret
        except:
            Session().rollback()
            raise

这假设你有这样的事情:Session = scoped_session(sessionmaker())所以Session()总是返回threadlocal会话。

注意:我不知道webapp2,所以我不确定这是不是正确的地方。例如,我不确定在父类的dispatch调用中是否可能存在异常处理程序。因此,您可能需要在不同的地方使用类似的技术(或者在此处检测错误的其他方式)。