0

我正在使用带有cherrypy的zodb。我正在将数据传递到 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
4

1 回答 1

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

于 2013-09-03T09:37:46.337 回答