0

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

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

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

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

谢谢

4

1 回答 1

0

覆盖 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()总是返回线程本地会话。

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

于 2013-08-27T11:25:55.343 回答