使用Peewee ORM打开和关闭多个功能的连接

时间:2018-10-25 18:22:31

标签: python peewee

当前,我正在使用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

避免这些问题的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

答案似乎对我来说很明显...如果仅从func_a中调用func_b,则只需从func_b中删除连接管理代码。最外层的函数func_a在这种情况下会处理它。

从更一般的意义上讲,通常有一个离散的计算单元正在执行。在Web应用程序中,这将是一个请求/响应-因此,对于Web应用程序,通常在收到请求时打开连接,然后在发送响应时将其关闭。

对于脚本,您只需在脚本开始时连接一次,然后在脚本完成时关闭(隐式或显式)连接。

通常,将连接管理代码放在执行功能的函数中是不明智的。将它们放在最外面的范围内-调用函数的部分。