我应该如何在多模块Python应用程序中建立和管理数据库连接?

hik*_*aru 13 python mysql

我们有一个包含20多个模块的Python应用程序,其中大多数模块由多个Web和控制台应用程序共享.

我从未清楚地了解在多模块Python应用程序中建立和管理数据库连接的最佳实践.考虑这个例子:

我有一个模块为Users定义一个对象类.它有许多defs用于在数据库中创建/删除/更新用户.users.py模块被导入到a)基于控制台的实用程序,2)基于web.py的Web应用程序和3)持续运行的守护进程.

这三种应用中的每一种都有不同的生命周期.守护程序可以打开连接并保持打开状态.控制台实用程序连接,工作,然后死亡.当然,http请求是原子的,但Web服务器是守护进程.

我正在打开,然后关闭Users类中每个函数内部的连接.这似乎效率最低,但它适用于所有示例.用作测试的替代方法是声明并打开整个模块的全局连接.另一个选择是在顶层应用程序层创建连接并在实例化类时传递引用,但这对我来说似乎是最糟糕的想法.

我知道每个应用程序架构都不同.我只是想知道是否有最好的做法,它会是什么?

Bri*_*and 12

最好的方法是在需要执行某些操作(如获取和/或更新数据)时打开连接; 操纵数据; 在一个查询中将其写回数据库(对性能非常重要),然后关闭连接.打开连接是一个相当轻松的过程.

表现的一些陷阱包括

  • 当你不肯定与它交互时打开数据库
  • 使用比您需要的数据更多的选择器(例如,获取有关所有用户的数据并使用Python过滤它,而不是要求MySQL过滤掉无用的数据)
  • 编写未更改的值(例如,更新用户配置文件的所有值,仅当他们的电子邮件发生更改时)
  • 让每个字段单独更新服务器(例如,打开数据库,更新用户电子邮件,关闭数据库,打开数据库,更新用户密码,关闭数据库,打开...你明白了)

最重要的是,打开数据库的次数并不重要,这是您运行的查询次数.如果你可以让你的代码加入相关的查询,你就赢了这场战斗.