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

6 投票
2 回答
1579 浏览
提问于 2025-04-15 22:50

我正在为我的应用程序构建一个数据库库,使用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 个回答

3

我知道这并没有直接回答你问的问题,但其实真正的建议是,你可能不应该自己去实现一个数据库包。你最好使用一个现成的,比如 SQLAlchemy,然后按照那个库的标准方式来使用。

如果你真的想自己做一个,那么最好的方法会受到很多因素的影响,比如这个项目是否只需要连接一个数据库?

如果这是一个比较简单的应用,我觉得引入一个全局的连接对象可能是个不错的选择。你随时可以在后台把它换成一个连接池等等。

5

不,别把一个数据库连接分散到多个模块中——这是不好的设计。应该让一个单独的类来处理数据库连接,并为你应用中的其他类或模块提供服务。

这和其他非数据库相关的良好设计原则是一样的。数据库连接是一个全局资源。在多个模块之间共享这个资源,就像是有一个全局变量可以从很多地方访问——这通常是不好的(除非你有非常强烈的理由,但你没有)。应该把这个全局资源封装在一个类里来管理。

撰写回答