我正在使用sqlite3作为基础为我的应用程序构建数据库库。我想像这样构建它:
db/ __init__.py users.py blah.py etc.py
所以我会在Python中这样做:
import db
db.users.create('username', 'password')
我正在分析如何处理数据库连接的分析瘫痪(哦不!)。我真的不想在这些模块中使用类,能够创建一堆可以以相同方式操作同一数据库的“用户”对象似乎并不合适 - 因此继承连接是禁止。
我是否应该与所有模块使用的数据库建立一个全局连接,然后将其放在每个模块中:
#users.py
from db_stuff import connection
或者我应该为每个模块创建一个新连接并保持活着吗?
或者我应该为每笔交易创建一个新连接?
如何使用这些数据库连接?对于游标对象也是如此:我是否为每个事务创建一个新游标?为每个数据库连接只创建一个?
答案 0 :(得分:4)
不,不要在几个模块上传播连接 - 这是糟糕的设计。让一个类处理数据库连接并为应用程序中的其他类/模块提供服务。
这与非DB相关的良好设计原则没有什么不同。连接是全局资源。在许多模块上共享该资源类似于可以从许多地方访问全局变量 - 默认情况下是一件坏事(除非你有一个非常令人信服的理由,但你没有)。将全局资源封装在一个类中以处理它。
答案 1 :(得分:3)
我知道这并没有真正回答你提出的实际问题,但真正的答案是你可能不应该实现自己的数据库包。您应该使用现有的(例如SQLALchemy),然后使用该库标准的任何模式。
如果你真的想自己做,那么最好的方法将取决于很多因素,例如:项目肯定只需要连接到一个数据库吗?
如果它是一个相当简单的应用程序,我认为导入全局连接对象可能是要走的路。您可以随时将其替换为幕后连接池等。