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