首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >适用于Python的数据库抽象层有哪些

适用于Python的数据库抽象层有哪些
EN

Stack Overflow用户
提问于 2009-03-25 00:34:50
回答 8查看 11.8K关注 0票数 18

我开始参与一个开源项目Gramps,该项目正在探索将后端从BSDDB转换到关系数据库。无论是SQLite还是MySQL,我们还没有完全决定,甚至可能会在一些有限的能力内尝试这两种方式。我是一名专业的开发人员,但我是python的新手,所以我对当前选择的工具/库不是很熟悉。我的任务是研究DB抽象层。There is currently a wiki discussion going on to compare them.是一个对象关系映射器,可能很好,但不是绝对必要的。虽然我知道这通常是DB抽象层的同义词。如果包含一个ORM,那么ad hock查询必须是可用的,而不需要太多的角力。

目前,该列表包括:

CouchDB,我还没有调查过这个问题。

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

SQLAlchemy这似乎是现在最流行的?但我对python世界的了解非常有限。

SQLObject,我还没有调查过这个问题。

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

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2009-03-25 00:40:51

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

票数 21
EN

Stack Overflow用户

发布于 2009-03-25 00:43:57

从Python访问适当的数据库几乎总是使用与DB-API2.0兼容的适配器模块完成的。虽然所有DB-API模块都有相同的API(或者非常相似;并非所有后端都支持所有功能),但是如果您自己编写SQL,则可能会使用特定于产品的方言编写SQL,因此它们在实践中并不像理论上那样可互换。

老实说,SQLite听起来非常适合您的用例。我不会为"embedded MySQL“而烦恼;这听起来似乎是两全其美。您是否想要像SQLAlchemy这样的对象关系管理完全取决于您;无论哪种方式都有很好的理由。就我个人而言,我不喜欢ORM,但是我有数学学位,所以我喜欢SQL作为一种语言的事实可能并不太令人惊讶:)

票数 4
EN

Stack Overflow用户

发布于 2009-03-25 02:02:43

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

任何像SQLAlchemy、SQLObject或Django ORM都是在DB-API之上实现的,我推荐在直接DB-API上使用它们中的任何一个,因为它可以让Gramps灵活地在本地桌面用户的嵌入式模式下运行sqlite,然后在将来的某个时候,与基于web的Gramps共享Postgresql/MySQL数据库连接。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/679806

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档