当前,我正在使用Peewee ORM(v2.10.2)编写程序。 我已经阅读了文档中的一种很好的做法,即明确地打开和关闭每个函数中的连接。但是,由于我将代码拆分为不同的函数,因此会发生以下情况:函数A使用函数B,并且都独立打开和关闭DB连接。 这样,我得到一个例外,即连接已经关闭,但是如果函数B完成并关闭连接并且函数A仍在数据库上进行工作,则有可能破坏程序。
下面是一些伪代码来说明我的问题:
def func_b():
database.get_conn()
#do database stuff
database.close()
def func_a():
database.get_conn()
#do database stuff
func_b()
#do more database stuff <---this will fail cause the connection is already closed by func_b
database.close() <---this wil raise an exception stating the connection is already closed
避免这些问题的最佳方法是什么?
答案 0 :(得分:0)
答案似乎对我来说很明显...如果仅从func_a中调用func_b,则只需从func_b中删除连接管理代码。最外层的函数func_a在这种情况下会处理它。
从更一般的意义上讲,通常有一个离散的计算单元正在执行。在Web应用程序中,这将是一个请求/响应-因此,对于Web应用程序,通常在收到请求时打开连接,然后在发送响应时将其关闭。
对于脚本,您只需在脚本开始时连接一次,然后在脚本完成时关闭(隐式或显式)连接。
通常,将连接管理代码放在执行功能的函数中是不明智的。将它们放在最外面的范围内-调用函数的部分。