【问题标题】:Purpose of SQLAlchemy over MySQLdbSQLAlchemy 在 MySQLdb 上的用途
【发布时间】:2011-02-02 18:21:37
【问题描述】:

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

【问题讨论】:

    标签: python sql mysql sqlalchemy


    【解决方案1】:

    您不使用 SQLAlchemy 而不是 MySQLdb——您使用 SQLAlchemy 来访问诸如 MySQLdb、oursql(我听说的另一个 MySQL 驱动程序更好并且性能更好)、sqlite3 模块、psycopg2 或任何其他数据库驱动程序之类的东西正在使用。

    ORM(如 SQLAlchemy)有助于抽象出您正在使用的数据库的详细信息。这使您可以避免正在使用的数据库系统的混乱细节,避免有时出现错误的可能性(并引入其他可能性),并使移植变得微不足道(至少在理论上)。

    【讨论】:

    • SQLAlchemy 声称由 CoreORM 组成。我是否需要安装 MySQLdb 才能连接 Python 和 MySQL?我什么都不知道,但按照我的理解,SQLAlchemy Core 可以替代 MySQLdb。那正确吗? sqlalchemy.org/features.html
    • @Kit,没有 SQLAlchemy Core 不会取代像 MySQLdb 这样的实际 DBAPI2 数据库适配器。 SQLAlchemy Core 实际上并不与您的数据库通信。您需要安装 MySQLdb(或者最好是 oursql)才能与 MySQL 通信。
    【解决方案2】:

    不同数据库引擎之间的可移植性更容易(假设明天您决定要迁移到 sqlite、PostgreSQL 或...),以及更高级别的抽象(因此可能提高生产力)。

    这些是一些好的原因。使用 ORM 也有一些不好的原因,例如不想学习 SQL,但我怀疑 SQLAlchemy 并没有真正受到人们的青睐,因为他们想要 ORM 而不是纯 SQL;-)。

    【讨论】:

    • 在 Ruby 中使用 Active Record 或在 PHP 中使用 Doctrine 的原因几乎相同(或其他任何形式...)
    • MySQLdb 目前不支持 unicode(发现一些 unicode 相关的 bug 后关闭)。 SQLAlchemy 抽象了那些你应该手动执行而不使用它的编码/解码调用。
    • "或者任何其他的 orm 真的......" 好吧,我不知道 ORM 的存在或者它们在今天之前是什么。
    【解决方案3】:

    除了亚历克斯所说的……

    1. “不想学 SQL”可能是件坏事。然而,如果你想让更多的非技术人员参与到开发过程中,ORM 在这方面做得很好,因为它确实将这种复杂程度降低了一个层次。让 Django 成功的因素之一是它能够让“报纸记者”而不是软件工程师来维护网站。

    2. ORM 的一个限制是它们不像使用原始 SQL 那样可扩展。在之前的工作中,我们想摆脱大量手动 SQL 生成并切换到 ORM 以实现易用性(SQLAlchemy、Elixir 等),但几个月后,我最终不得不再次编写原始 SQL绕过 ORM 系统生成的低效或高延迟查询。

    【讨论】:

    • 回复:原因 2,让 SA 如此出色的部分原因在于,将原始 sql 粘贴到您喜欢的任何地方都很简单:engine.execute("MY RAW SQL STRING;")
    猜你喜欢
    • 2022-12-19
    • 1970-01-01
    • 2017-08-14
    • 2021-01-09
    • 1970-01-01
    • 2019-08-22
    • 2014-09-12
    • 2019-01-10
    • 1970-01-01
    相关资源
    最近更新 更多