python - 使用 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
避免这些问题的最佳方法是什么?
解决方案
答案对我来说似乎很明显...如果仅从 func_a 调用 func_b,则只需从 func_b 中删除连接管理代码。在这种情况下,最外层的函数 func_a 将处理它。
在更一般的意义上,通常有一个离散的计算单元正在完成。在 Web 应用程序中,这将是一个请求/响应——因此,对于 Web 应用程序,您通常会在收到请求时打开连接,然后在发送响应时关闭它。
对于脚本,您可以在脚本开始时连接一次,并在脚本完成时关闭连接(隐式或显式)。
通常,将连接管理代码放在执行操作的函数中是不明智的。将它们放在最外层范围内——调用函数的部分。
推荐阅读
- sql-server - 从表复制时忽略 SQL Server 换行符
- excel - 2 张订单和新订单确认更改跟进
- reactjs - 在带有 ParcelJS 的 Typescript 中使用环境变量
- c - C - if 语句系列 vs else if 时间测量
- java - 如何在不同位置的两台笔记本电脑之间建立连接
- ios - 使用来自 Node Js 的 Ionic 3/Cordova iOS 应用在 iPhone 中播放视频(来自流媒体),无需太多时间加载
- ms-access - 在 MS Access 中过滤包含字符串的日期列
- html - 按钮悬停动画背景颜色未完全填充
- jquery - 即使切换课程,背景图像也会保留
- php - PHP VoltDB 客户端库安装