SQLAlchemy还是psycopg2?

时间:2011-12-21 10:08:50

标签: python postgresql sqlalchemy psycopg2

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

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

psycopg2的优点(正如我目前所理解的)是:

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

    1. 我知道我会想要进一步的ORM
    2. psycopg2是(“过时”?) - 不知道它会保留多长时间
    3. 我对SqlAlchemy(缓慢/解释,臃肿,陡峭的学习曲线)的看法是否真实 - 无论如何我可以使用sqlAlchemy以“粗略和准备”的方式使用psycopg - 即:

      1. 直接执行SQL语句,而不必乱用ORM层等。
      2. 这样做的任何例子都可用吗?

2 个答案:

答案 0 :(得分:47)

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

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

答案 1 :(得分:4)

与数据库交谈任何人都需要驱动程序。如果您正在使用SQL Plus等客户端进行oracle,MysqlCLI for Mysql,那么它将直接运行查询,并且该客户端随附DBServer包。

使用java,c,python,C#等语言从外部进行通信...我们需要驱动程序来访问该数据库。 psycopg2是从python运行PostgreSQL查询的驱动程序。

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