在python类中处理数据库对象的好方法是什么?

时间:2010-02-28 21:03:39

标签: python sqlalchemy pylons

我应该直接从每个类的方法中访问全局db对象吗?或者从每个方法,我应该实例化db对象的实例?

我的一个数据库对象根据所访问信息的ID而变化,因此它是通过函数connectToDatabase(id)创建的。我应该将它作为一个全局函数,让它返回一个数据库对象并从每个方法或其他东西实例化它?

感谢。

2 个答案:

答案 0 :(得分:2)

在这种情况下,和其他许多人一样,我更喜欢dependency injection:让你的类(例如在__init__中)接受数据库连接作为参数。

这使得测试变得更容易和更清晰,让您可以根据需要切换策略(例如,如果您发现一次创建过多的数据库连接,则转移到“数据库连接池”策略),并分配责任更准确,更灵活。

总的来说,我认为依赖注入可能是伟大的“Gang of 4”一书中没有列出的最重要的设计模式! - )

答案 1 :(得分:1)

SQLAlchemy建议创建会话的函数是全局的。

http://www.sqlalchemy.org/docs/reference/orm/sessions.html#sqlalchemy.orm.sessionmaker

  

这是sessionmaker()的意图   函数在全局范围内调用   申请范围和   返回课程可供使用   其余的应用程序作为   用于实例化的单个类   会话。