SQLAlchemy相对于MySQLdb的优势是什么?

26

为什么人们使用SQLAlchemy而不是MySQLdb?它有哪些优势?

3个回答

34
您不会使用SQLAlchemy来代替MySQLdb,而是使用SQLAlchemy来访问像MySQLdb、oursql(另一个据说更好且性能更佳的MySQL驱动程序)、sqlite3模块、psycopg2或您正在使用的其他数据库驱动程序。
ORM(如SQLAlchemy)有助于抽象出您正在使用的数据库的详细信息。这使得您可以避免陷入所使用的数据库系统的繁琐细节中,有时也可以避免错误的可能性(并引入其他可能性),使得迁移变得微不足道(至少在理论上如此)。

SQLAlchemy声称由__Core__和__ORM__组成。我需要安装MySQLdb才能在Python和MySQL之间进行接口吗?我不知道任何东西,但我理解的方式是,SQLAlchemy __Core__可以替代MySQLdb。是这样吗?http://www.sqlalchemy.org/features.html - Kit
2
@Kit,SQLAlchemy Core并不会替代实际的DBAPI2数据库适配器,例如MySQLdb。SQLAlchemy Core并不会直接与您的数据库通信。您需要安装MySQLdb(或更好的是oursql)来与MySQL进行通信。 - Mike Graham

13

更容易在不同的数据库引擎之间进行移植(比如说,明天你决定要转移到sqlite、PostgreSQL等),并且具有更高层次的抽象(因此可能会提高生产力)。

这些是使用ORM的一些好理由。当然,也有一些不好的理由,比如不想学习SQL,但我怀疑特别是SQLAlchemy并不是因为这样的不良理由而受到人们青睐,而是因为它比裸露的SQL更方便使用。


‰ΩøÁî®Ruby‰∏≠ÁöÑActive RecordÊàñPHP‰∏≠ÁöÑDoctrineÔºàÊàñ‰ªª‰ΩïÂÖ∂‰ªñorm...ÔºâÁöщ∏ªË¶ÅÂéüÂõÝÂü∫Êú¨Áõ∏Âêå„ÄÇ - SeanJA
MySQLdb目前不支持Unicode(在发现一些与Unicode相关的错误后被关闭)。SQLAlchemy可以抽象出那些需要手动执行的编码/解码调用。 - Yaroslav
“或者说任何其他ORM ...” 我今天之前对ORM毫不知情,也不了解它们的存在。 - Eric Pruitt

5
除了Alex所说的内容之外...
1. "不想学习SQL"可能是一个坏习惯。然而,如果你想让更多避免使用SQL的人参与到开发过程中,ORM(对象关系映射)可以很好地完成这个任务,因为它抽象出了"原始SQL",将复杂性降低了一级。使Django成功的因素之一是其能够让"报纸记者"来维护网站,而不是软件工程师。
2. ORM的一个限制是它们不像使用原始SQL那样具有可扩展性。在以前的一份工作中,我们想要摆脱大量手动SQL生成的工作,于是转向ORM以便更容易使用(SQLAlchemy、Elixir等)。但几个月后,我又不得不编写原始SQL来避免由ORM系统产生的低效或高延迟查询。

3
关于“原因2”,使得SA特别好的部分是,随意将原始SQL语句插入任何地方都非常简单:engine.execute("MY RAW SQL STRING;")。 - Gregg Lind
1
原因1:你称那些能使用ORM但不想编写SQL的人为非技术人员是可笑的。事实上正好相反,那些只会写SQL而无法开发真正应用程序的SQL开发人员不想使用除SQL以外的任何东西,因为他们不能用编程语言编写任何代码。因此,应该将那些SQL开发人员称为非技术人员,对吗? - nomadSK25
1
我同意@nomadSK25的观点,SQL对于程序员来说是必要的复杂性。在代码中混合SQL就像在明亮的日光下与黑客调情。 - Phyo Arkar Lwin
你们说得很有道理。这个回答部分是因为我在一家公司工作,开发人员专注于应用程序,而数据团队则构建SQL查询。在某些情况下,我们有一些初级开发人员“不会做SQL”,但不想等待数据人员为他们编写查询,所以ORM适合他们。我在上面的回答中稍微修改了措辞,以回应你们的评论。 - wescpy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接