首页 > 解决方案 > 使用 Peewee ORM 打开和关闭多个函数的连接

问题描述

目前我正在使用 Peewee ORM (v2.10.2) 开发一个程序。我在文档中阅读了明确打开和关闭每个函数中的连接的好习惯。但是,由于我已将代码拆分为不同的函数,因此会出现函数 A 使用函数 B 并独立打开和关闭数据库连接的情况。通过这样做,我得到一个异常,即连接已经关闭,但如果函数 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

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

标签: pythonpeewee

解决方案


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

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

对于脚本,您可以在脚本开始时连接一次,并在脚本完成时关闭连接(隐式或显式)。

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


推荐阅读