我该如何为我的Python应用构建一个简单的数据库包?
我正在为我的应用程序构建一个数据库库,使用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
不,别把一个数据库连接分散到多个模块中——这是不好的设计。应该让一个单独的类来处理数据库连接,并为你应用中的其他类或模块提供服务。
这和其他非数据库相关的良好设计原则是一样的。数据库连接是一个全局资源。在多个模块之间共享这个资源,就像是有一个全局变量可以从很多地方访问——这通常是不好的(除非你有非常强烈的理由,但你没有)。应该把这个全局资源封装在一个类里来管理。