我应该如何为我的python应用程序构建一个简单的数据库包?

时间:2010-05-18 02:56:50

标签: python database sqlite library-design

我正在使用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

或者我应该为每个模块创建一个新连接并保持活着吗?

或者我应该为每笔交易创建一个新连接?

如何使用这些数据库连接?对于游标对象也是如此:我是否为每个事务创建一个新游标?为每个数据库连接只创建一个?

2 个答案:

答案 0 :(得分:4)

不,不要在几个模块上传播连接 - 这是糟糕的设计。让一个类处理数据库连接并为应用程序中的其他类/模块提供服务。

这与非DB相关的良好设计原则没有什么不同。连接是全局资源。在许多模块上共享该资源类似于可以从许多地方访问全局变量 - 默认情况下是一件坏事(除非你有一个非常令人信服的理由,但你没有)。将全局资源封装在一个类中以处理它。

答案 1 :(得分:3)

我知道这并没有真正回答你提出的实际问题,但真正的答案是你可能不应该实现自己的数据库包。您应该使用现有的(例如SQLALchemy),然后使用该库标准的任何模式。

如果你真的想自己做,那么最好的方法将取决于很多因素,例如:项目肯定只需要连接到一个数据库吗?

如果它是一个相当简单的应用程序,我认为导入全局连接对象可能是要走的路。您可以随时将其替换为幕后连接池等。