Python的可行数据库抽象层是什么?

时间:2009-03-25 00:34:50

标签: python sql mysql database sqlite

我开始参与一个开源项目Gramps,它正在探索将他们的后端从BSDDB切换到关系数据库。无论是SQLite还是MySQL,我们还没有完全决定,甚至可能尝试以有限的容量进行这两项工作。我是一名专业开发人员,但我是python的新手,所以我对当前选择的工具/库并不熟悉。我的任务是研究数据库抽象层。 There is currently a wiki discussion going on to compare them.对象关系映射器可能不错,但并非绝对必要。虽然我知道这通常是数据库抽象层的同义词。如果包含ORM,则必须提供hock查询,而不必进行太多摔跤。

目前该列表包括:

CouchDB 我还没有调查过这个。

DB-API 这似乎是一个标准的python api,每个db都会创建自己的模块来使用它。甚至BSDDB似乎也写了一篇,但我还没有完全探索过它。模块可以互换吗?

SQLAlchemy 这似乎是现在最受欢迎的?但我对蟒蛇世界的接触非常有限。

SQLObject 我还没有调查过这个。

那么人们对python数据库抽象层的看法和建议是什么?

8 个答案:

答案 0 :(得分:20)

仔细查看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。

答案 1 :(得分:4)

几乎总是使用符合DB-API 2.0标准的适配器模块从Python访问正确的数据库。虽然所有DB-API模块都具有相同的API(或者非常相似;并非所有后端都支持所有功能),但如果您自己编写SQL,则可能会使用特定于产品的方言编写SQL,因此它们不能互换。在理论上练习。

老实说,SQLite听起来非常适合您的用例。我不打扰“嵌入式MySQL”;这听起来像两个世界中最糟糕的。您是否想要像SQLAlchemy这样的ORM完全取决于您;无论哪种方式都有好的论据。就个人而言,我不喜欢ORM,但后来我获得了数学学位,所以我很欣赏SQL作为一种语言可能并不太令人惊讶:)

答案 2 :(得分:3)

CouchDB不是关系数据库,因此它没有DB-API接口。它是一个文档数据库,这意味着它不会对Gramps有用,因为它需要一些扭曲来识别相关人员之间的链接。最重要的是,它只能在客户端/服务器模式下运行。

任何ORM,如SQLAlchemy,SQLObject或Django ORM都是在DB-API之上实现的,我建议使用其中任何一个直接DB-API,因为它可以让Gramps在嵌入式模式下为本地桌面运行sqlite的灵活性用户然后在不久的将来分享Postgresql / MySQL数据库连接以及基于Web的Gramps版本。

答案 3 :(得分:2)

我非常喜欢Storm

  

Storm是一个对象关系映射器   (ORM)开发的Python   典范。该项目已进入   发展一年多了   用于Canonical项目,如   Launchpad,最近一直在   作为开源产品发布。

在我看来,Storm比SQLAlchemy更容易学习。类似于Django的ORM。

答案 4 :(得分:2)

web2py有一个可以独立使用的数据库抽象层。我们在sqlite3,Microsoft SQL Server,Oracle和MySQL之间切换,零代码更改。印象深刻。

答案 5 :(得分:0)

如果您的项目有任何真正的复杂性,请远离ORM。

http://blogs.tedneward.com/2006/06/26/The+Vietnam+Of+Computer+Science.aspx

答案 6 :(得分:0)

当我开始将遗留应用程序转换为使用ORM时,我查看了SQLObject和SQLAlchemy。起初我使用SQLObject因为它看起来很熟悉(过去的Django经验)而且SQLAlchemy看起来很复杂。大约2个小时后,我开始用SQLObject打墙。然后我再次看了SQLAlchemy并立即获得奖励。它不仅理解并映射数据库中的每个奇怪的表,它甚至可以进行我以后必须做的更奇怪的查找!

答案 7 :(得分:0)

我认为CouchDB是Gramps等项目的最佳选择。

Gramps的有用CouchDB功能: