我开始参与一个开源项目Gramps,它正在探索将他们的后端从BSDDB切换到关系数据库.无论是SQLite还是MySQL,我们还没有完全决定,甚至可能尝试以有限的容量进行这两项工作.我是一名专业开发人员,但我是python的新手,所以我对当前选择的工具/库并不熟悉.我的任务是研究数据库抽象层.目前正在进行维基讨论以进行比较.对象关系映射器可能很好但不是绝对必要的.虽然我知道这通常是数据库抽象层的同义词.如果包含ORM,则必须提供hock查询,而不必进行太多摔跤.
目前该清单包括:
CouchDB 我还没有调查过这个.
DB-API 这似乎是一个标准的python api,每个db都会创建自己的模块来使用它.甚至BSDDB似乎也写了一篇,但我还没有完全探索过它.这些模块可以互换吗?
SQLAlchemy 这似乎是现在最受欢迎的?但我对蟒蛇世界的接触非常有限.
SQLObject 我还没有研究过这个.
那么人们对python数据库抽象层的看法和建议是什么?
仔细查看SQLAlchemy.
您可以使用SQLite进行测试和开发.
您可以使用MySQL进行生产 - 基本上不会对您的应用程序进行任何更改.
DB-API虽然被广泛遵守,但具有足够的灵活性:(1)您不会与底层RDBMS中的SQL变体隔离;(2)仍然存在难以隐藏的DB驱动程序特定功能.
另一个好的ORM层是作为Django一部分的ORM .您可以(稍加努力)仅使用Django ORM而无需使用Django Web框架的其余部分.
使用ORM层(SQLAlchemy或SQLObject)优先于DB-API.
为什么?您的模型应该是一个坚实,清晰,经过深思熟虑的OO模型.关系映射应该在对象模型之后排在第二位.SQLAlchemy使这成为一种合理的方法.
"DB抽象层"将在正常的事件过程中发生.实际上,由于DB-API(由SQLAlchemy使用),您提供了两个抽象层:ORM和DB-API.