SQLAlchemy + Tornado:如何为SQLAlchemy的ScopedSession创建scopefunc?
问题内容:
使用龙卷风,我想创建一些中间件魔术,以确保正确关闭/清理我的SQLAlchemy会话,从而不会在一个请求到下一个请求之间共享对象。诀窍在于,由于我的某些龙卷风处理程序是异步的,因此我不能仅为每个请求共享一个会话。
因此,我离开尝试创建一个ScopedSession,它知道如何为每个请求创建一个新会话。我需要做的就是为我的代码定义一个scopefunc,它可以将当前正在执行的请求转换为某种唯一键,但是我似乎无法弄清楚如何在任何时间点
获取 当前请求(外部当前RequestHandler的范围之内,而我的函数对此无权访问)。
我可以做些什么来使这项工作吗?
问题答案:
您可能希望将Session
与请求本身关联(即,如果不方便,请不要使用scopedsession)。然后,您可以说request.session
。仍然需要在开始/结束时具有挂钩以进行设置/拆卸。
编辑:自定义范围功能
def get_current_tornado_request():
# TODO: ask on the Tornado mailing list how
# to acquire the request currently being invoked
Session = scoped_session(sessionmaker(), scopefunc=get_current_tornado_request)