在cherrypy中断开数据库连接的标准方法?

时间:2013-09-03 01:50:27

标签: cherrypy zodb

我正在使用zodb和cherrypy。我将数据传递到jinja2模板。我想在返回模板渲染之前关闭我的zodb连接。

我不能,因为模板在渲染时需要连接,因为数据是zodb数据。

这出错...

zconn.close() #zconn.close closes the conn,db, and storage
return template.render(args....)

在我完成返回后如何关闭zodb conn?是否有一些“请求前”和“请求后”功能我可以定义为始终有数据库连接? cherrypy文档在数据库连接上没有太多明确的东西,除了“在公开函数的开头明确地执行它 - 并在返回之前关闭它”。

或者说标准做法是......

page = template.render(args...)
zconn.close()
return page

1 个答案:

答案 0 :(得分:1)

标准做法是仅在请求完成时关闭连接,是。

推迟接近最新的可能时刻。使用可以使用上下文管理器来处理关闭:

from contextlib import contextmanager

@contextmanager
def zodbconn(db):
    conn = db.open()
    yield conn.root()
    conn.close()

然后使用:

with zodbconn(db) as zconn:
    return template.render(args....)

,处理return语句后,会自动关闭连接。