Python 运行 仅在函数或方法内部基于连接的应用程序

Python run connexion based application inside functions or methods only

我有一个使用 connexion 和 swagger andd 的应用程序已经相当大了。就像在这个框架的 examples 中一样,到数据库的连接是在任何函数或 class 之外创建的。我发现这种方法是一种非常糟糕的设计,我真的觉得应该有一个地方(例如 main()),在那里创建所有必要的对象并调用一些 .运行() 方法。

我想要的最低限度是至少有在 swagger.yaml 中注册为端点处理程序的函数,以接受我提供的数据库连接,而不是必须在应用程序启动时创建并可用的函数所有功能。

有没有办法实现这样的目标,或者我是否必须在一个文件中创建数据库连接并让所有其他文件导入并使用它?

在你举的例子中,我认为很遗憾我们称 orm.init_db('sqlite:///:memory:') 在 If Main 之外。 在示例中它是无害的,但请考虑相关案例,例如

  1. sqlite:////tmp/pets.db 或
  2. 到数据库服务器的 TCP 连接

由于副作用,无法安全地 imported 文件 -- 它 留下一个 .db 文件,或者它可能因连接错误而死 如果我们缺乏信誉或网络连接。 这会影响例如$ python -m doctest。 所以我宁愿推迟创建连接,直到我们真正需要它, 单身人士 getter 可以轻松做到这一点。 (或者让 class __init__() 创建连接。)


对于您的应用程序,与其传递全局或参数连接, 考虑传递一个可以根据需要获取连接的函数对象。 它为您提供了一定程度的间接性,并允许进行条件处理。