我正在创建一个webapp2,SQLalchemy,基于postgresql的Web应用程序。
我的问题是:*每当请求到来时如何创建SQLAlchemy会话对象(scoped_session)并在发送响应时关闭同一对象。*
通过文档我理解这是创建和关闭会话对象的最佳方法。但是如何用WebApp2实现它我不确定。如果有人知道更好更有效的方式,请告诉我。
目前我在配置文件中创建了一个scoped_session obj,我导入了这个文件,并在需要的地方使用obj。我没有关闭任何我认为不是一个好习惯的对象。我想要实现的是每当有来自浏览器的请求时,我得到一个新的会话对象,使用该会话对象与数据库交互,并在返回响应时关闭会话对象。
由于
答案 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
调用中是否可能存在异常处理程序。因此,您可能需要在不同的地方使用类似的技术(或者在此处检测错误的其他方式)。