使用 psycopg2 调用函数而不是原始查询

Using psycopg2 to call functions instead of raw queries

我有一个非常简单的问题。我打算制作一个烧瓶应用程序,最终可能会进行一些复杂的 SQL 查询。出于这个原因,我决定不使用 ORM,而且我更喜欢自己编写 SQLs.

我在 postgres 函数中为 reading/writing 数据编写了一些简单的 SQLs,然后使用 psycopg2 进行函数调用。我认为这种方法比编写原始 SQLs 更好,因为它易于维护。

有谁知道采用这种方法的任何陷阱,或 psycopg2 的任何特定限制?谢谢。

ORM 可以为您提供很多帮助,即使您的应用程序只是 Postgres。我不得不在不同 OS 中支持非常复杂的部署,而且我知道 ORM 可以在需求发生变化时为您节省大量工作和痛苦。肯定有一些(小!)性能影响,但是当它真的很重要时你可以避免大部分慢路径(批量 inserts/updates、普通 SQL 等)。

我将以 SQLAlchemy 为例,但大多数 ORM 都具有相同的功能。

  1. 你必须用普通 Python 或使用 ORM 编写一些到对象(甚至字典)的数据映射,ORM 免费提供 if 你想使用这个功能。
  2. Define tables and models 在你的代码中。您甚至不必使用 SQLAlchemy 对象。
  3. Write SQL statements with Python code 大多数时候。它被编译到您选择的数据库中。它不适用于真正复杂的查询,但您始终可以回退到普通 SQL.
  4. 使用 alembic 的内置迁移。您的所有数据库模式历史记录以及您的代码和大多数模式更改都是自动生成的。
  5. 它与数据库和数据库驱动程序无关。在内部,SQLAlchemy 使用 psycopg2 或其他 Postgres 驱动程序。我记得没有 ORM 有它自己的驱动程序。曾几何时,我遇到了 psycopg2 的 unicode 问题(可能是我做错了什么),只是将 SQLAlchemy 更改为使用另一个驱动程序并且工作正常。其他时候,我想 运行 我的应用程序 PyPypsycopg2 不受支持。