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

时间:2016-04-25 22:26:39

标签: python sql postgresql flask psycopg2

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

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

有没有人知道采取这种方法的任何陷阱,或者psycopg2特有的任何限制?谢谢。

1 个答案:

答案 0 :(得分:1)

即使您的应用程序仅限Postgres,ORM也可以为您提供很多帮助。我不得不支持不同操作系统中非常复杂的部署,我知道ORM可以在需求变化时为您节省大量工作和痛苦。绝对有一些(小!)性能命中,但是当它非常重要时(大量插入/更新,纯SQL等),你可以避免大部分慢速路径。

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

  1. 您必须使用纯Python或ORM编写一些数据映射到对象(甚至是dict),ORM可以免费使用如果您想要使用此功能。
  2. 代码中的
  3. Define tables and models。您甚至不必使用SQLAlchemy对象。
  4. Write SQL statements with Python code大部分时间。它被编译到您选择的数据库中。它不适用于非常复杂的查询,但您始终可以回退到纯SQL。
  5. 使用alembic进行内置迁移。您的代码和大多数架构更改的所有数据库架构历史记录都是自动生成的。
  6. 与数据库和数据库驱动程序无关。在内部,SQLAlchemy使用psycopg2或其他Postgres驱动程序。我记得没有ORM有自己的驱动程序。曾几何时,我有psycopg2的unicode问题(可能是我做错了),只是改变了SQLAlchemy使用另一个驱动程序并且工作正常。其他时候,我想使用PyPy运行我的应用程序并且不支持psycopg2