SQLAlchemy 还是 psycopg2?
Posted
技术标签:
【中文标题】SQLAlchemy 还是 psycopg2?【英文标题】:SQLAlchemy or psycopg2? 【发布时间】:2012-01-25 03:57:30 【问题描述】:我正在编写一个快速而肮脏的脚本,它需要与数据库 (PG) 交互。
脚本是针对现有问题的务实的战术解决方案。然而,我设想脚本会随着时间的推移演变成一个更“精致”的系统。鉴于它目前正在非常迅速地组合在一起(即我没有时间倾注大量文档),我很想走快速而肮脏的路线,使用 psycopg。
psycopg2 的优点(据我目前的理解)是:
-
用 C 编写,比 sqlAlchemy(用 Python 编写)快吗?
DBAPI 上没有抽象层,因为只使用一个 db 和一个 db(暗示 -> 快速)
(目前),我不需要 ORM,所以我可以直接执行我的 SQL 语句,而无需学习新的 ORM 语法(即轻量级)
缺点:
-
我知道我会想要一个 ORM 更进一步
psycopg2 是(“过时”?) - 不知道它会保留多久
我对 SqlAlchemy 的看法(缓慢/解释,臃肿,陡峭的学习曲线)是否正确 - 无论如何我可以以我想使用 psycopg 的“粗略和准备”方式使用 sqlAlchemy - 即:
-
直接执行 SQL 语句,无需搞乱 ORM 层等。
有没有这样做的例子?
【问题讨论】:
你从哪里挑出 psycopg2 是“过时”的想法?什么应该被淘汰? 顺便说一句,你也可以使用 Django 的 ORM 【参考方案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吗? 是的,您需要一个本机驱动程序来连接数据库。以上是关于SQLAlchemy 还是 psycopg2?的主要内容,如果未能解决你的问题,请参考以下文章
SQLAlchemy、Psycopg2 和 Postgresql 复制
SQLAlchemy/psycopg2 到 PostgreSQL 数据库的连接是不是加密
SQLAlchemy,Psycopg2和Postgresql COPY
如何使用 pandas sqlalchemy 和 psycopg2 处理 NaT
如何在与 SQLAlchemy 和 psycopg2 的 PostgreSQL 连接上设置“lock_timeout”?