我正在使用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
答案 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
语句后,会自动关闭连接。