6

我正在使用 sqlite3 作为基础为我的应用程序构建一个数据库库。我想像这样构造它:

D b/
    __init__.py
    用户.py
    废话
    等.py    

所以我会在 Python 中这样做:

import db
db.users.create('username', 'password')

关于如何处理数据库连接,我正在遭受分析瘫痪(哦,不!)。我真的不想在这些模块中使用类,能够创建一堆可以以相同方式操作同一个数据库的“用户”对象似乎并不合适——所以继承一个连接是不行。

我是否应该与所有模块使用的数据库建立一个全局连接,然后将其放入每个模块中:

#users.py
from db_stuff import connection

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

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

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

4

2 回答 2

5

不,不要将连接分布在多个模块上——这是糟糕的设计。让单个类处理数据库连接并为应用程序中的其他类/模块提供服务。

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

于 2010-05-18T04:04:30.687 回答
3

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

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

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

于 2010-05-18T03:14:27.363 回答