我正在使用 WebApp2、SQLAlchemy、Apache、PostgrSQL 等创建一个 Web 应用程序。我有一个config
文件,用于存储数据库凭据并使用 scoped_session 创建会话对象。现在我所有的视图文件都导入这个配置文件并像这样使用会话对象:
some_view.py
import config
def view():
query = config.session.query(bla bla)
这种方法不是最后的方法,我想使用最好的方法。
我想在这里实现的是使用装饰器或 webapp2相关的内置方法获取会话对象的某种方式,以便在执行视图函数后关闭会话对象。我尝试了很多方法,但无法实现。一个工作片段将受到高度赞赏。
如果有人有更好的方法,请提出建议。
谢谢
编辑 - - -
@javex:感谢您的建议。我正在寻找一个装饰器类,它在调用时将返回一个 scoped_session 对象,当工作完成时,关闭会话。这里有一个示例代码供您参考,但它不起作用。
class GetDBSession(object):
"""Decorator class to create DB session object"""
def __init__(self):
self.session = scoped_session(sessionmaker(bind=database_engine))
def __exit__(self): #Dont know if it works
self.session.close()
def __call__(self): #Dont know if it works
return self.session
我想像这样使用它:
@GetDBSession()
def view_func():
#work with session object here