python-3.x - Python 仅在函数或方法内运行基于连接的应用程序
问题描述
我有一个使用 connexion 和 swagger 的应用程序,并且已经相当大了。就像在这个框架的示例中一样,与数据库的连接是在任何函数或类之外创建的。我发现这种方法是一种非常糟糕的设计,我真的觉得应该有一个地方(例如 main()),在那里创建所有必要的对象并在它们上调用一些 .run() 方法。
我想要的最低要求是至少拥有在 swagger.yaml 中注册为端点处理程序的函数,以接受我提供的数据库连接,而不是必须在应用程序启动时创建并可供所有函数使用的函数。
有没有办法实现这样的事情,或者我是否必须在一个文件中创建数据库连接并且所有其他文件都导入它并使用它?
解决方案
在您引用的示例中,我认为我们
orm.init_db('sqlite:///:memory:')
在 If Main 之外调用是令人遗憾的。在示例中它是无害的,但请考虑相关情况,例如
- sqlite:////tmp/pets.db 或
- 与数据库服务器的 TCP 连接
由于副作用,无法安全地import
编辑该文件——它会留下一个 .db 文件,或者如果我们缺乏凭据或网络连接,它可能会因连接错误而死。这会影响例如$ python -m doctest
。所以我更喜欢推迟创建连接,直到我们真正需要它,单例 getter 可以轻松做到这一点。(或者让一个类__init__()
创建连接。)
对于您的应用程序,与其传递全局或参数连接,不如考虑传递一个可以根据需要获取连接的函数对象。它为您提供了一定程度的间接性,并允许进行条件处理。
推荐阅读
- javascript - 我更改了 flask-qrcode 中的语法但不能
- sql - 如何在两列数据类型均为日期的 Oracle 中的两列之间找到最多两位小数的分钟差异?
- python - 我无法理解这个列表理解
- linux - 物理 KASLR 已禁用:没有合适的内存区域
- typescript - 如何在 TypeScript 中将函数类型转换为异步等效项?
- html - 将链接添加到图像会破坏其他所有内容
- statistics - 计算给定 alpha 和均值的决定系数
- typescript - 尝试使用angularfire以角度加入一对多的firebase文档
- c++ - 无法发现使用另一个类 C++ 的“朋友”函数的错误
- c# - 获取所有相关食谱,无需过滤位置