【问题标题】:SQLAlchemy or psycopg2?SQLAlchemy 还是 psycopg2?
【发布时间】:2012-01-25 03:57:30
【问题描述】:

我正在编写一个快速而肮脏的脚本,它需要与数据库 (PG) 交互。

脚本是针对现有问题的务实的战术解决方案。然而,我设想脚本会随着时间的推移演变成一个更“精致”的系统。鉴于它目前正在非常迅速地组合在一起(即我没有时间倾注大量文档),我很想走快速而肮脏的路线,使用 psycopg。

psycopg2 的优点(据我目前的理解)是:

  1. 用 C 编写,比 sqlAlchemy(用 Python 编写)快吗?
  2. DBAPI 上没有抽象层,因为只使用一个 db 和一个 db(暗示 -> 快速)
  3. (目前),我不需要 ORM,所以我可以直接执行我的 SQL 语句,而无需学习新的 ORM 语法(即轻量级)

缺点:

  1. 我知道我会想要一个 ORM 更进一步
  2. psycopg2 是(“过时”?) - 不知道它会保留多久

我对 SqlAlchemy 的看法(缓慢/解释,臃肿,陡峭的学习曲线)是否正确 - 无论如何我可以以我想使用 psycopg 的“粗略和准备”方式使用 sqlAlchemy - 即:

  1. 直接执行 SQL 语句,无需搞乱 ORM 层等。

有没有这样做的例子?

【问题讨论】:

  • 你从哪里挑出 psycopg2 是“过时”的想法?什么应该被淘汰?
  • 顺便说一句,你也可以使用 Django 的 ORM

标签: python postgresql sqlalchemy psycopg2


【解决方案1】:

SQLAlchemy 是 ORM,psycopg2 是数据库驱动程序。这些是完全不同的东西:SQLAlchemy 生成 SQL 语句,而 psycopg2 将 SQL 语句发送到数据库。 SQLAlchemy 依赖 psycopg2 或其他数据库驱动程序与数据库通信!

作为一个相当复杂的软件层,SQLAlchemy 确实增加了一些开销,但它也极大地提高了开发速度,至少在您学习了该库之后是这样。 SQLAlchemy 是一个优秀的库,会教你整个 ORM 概念,但如果你不想从一开始就生成 SQL 语句,那么你就不需要 SQLAlchemy。

【讨论】:

  • 阅读了一些关于 SQLAlchemy 的内容。刚刚发现我可以将 psycopg2 指定为驱动程序,并且或多或少像我想要的那样使用手工制作的 SQL,所以最终决定使用 SQLAlchemy。
  • SQLAlchemy 和 psycopg2 是完全不同的东西,那部分是真的。但是 SQLAlchemy 不是 ORM。 ORM 只是其中的一部分,您可以选择完全忽略它(并且它的创建者打算完全是可选的,正如他在这段相当长的介绍视频中所说的那样:youtube.com/watch?v=P141KRbxVKc)。因此,在像这种 OP(过时)问题这样的情况下,SA 可能是“q'n'd”原始 SQL 解决方案的工具,能够稍后切换到 orm,而无需更改工具。
【解决方案2】:

要与数据库交谈,任何人都需要为此提供驱动程序。如果您正在使用诸如用于 oracle 的 SQL Plus、用于 Mysql 的 MysqlCLI 之类的客户端,那么它将直接运行查询,并且该客户端带有 DBServer 包。

要从外部使用任何语言(如 java、c、python、C#)进行通信...我们需要该数据库的驱动程序。 psycopg2 是从 python 运行 PostgreSQL 查询的驱动程序。

SQLAlchemy 是与数据库驱动不同的 ORM。它将为您提供灵活性,因此您可以在没有任何特定数据库标准的情况下编写代码。 ORM 为程序员提供数据库独立性。如果你在 ORM 中写object.save,那么它会检查哪个数据库与该对象相关联,它会根据后端数据库生成插入查询。

【讨论】:

  • 不用sqlalchemy+psycopg吗?
  • 是的,您需要一个本机驱动程序来连接数据库。
猜你喜欢
  • 1970-01-01
  • 2012-10-18
  • 2021-01-15
  • 2016-08-26
  • 2011-11-06
  • 2011-05-03
  • 2013-11-16
  • 2020-07-16
  • 2021-12-28
相关资源
最近更新 更多