【问题标题】:Using psycopg2 to call functions instead of raw queries [closed]使用 psycopg2 调用函数而不是原始查询 [关闭]
【发布时间】:2016-08-19 12:43:48
【问题描述】:

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

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

有谁知道采用这种方法有什么陷阱,或者 psycopg2 有什么限制?谢谢。

【问题讨论】:

    标签: python sql postgresql flask psycopg2


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您的回答。 SQLAlchemy 看起来确实非常引人注目,而且您可以使用纯 SQL 的事实似乎很好。然而,我想说的几点是,我将来不太可能改变我的部署,更重要的是我可能不得不编写带有复杂 JOIN 的查询。如果有人能说服我psycopg2 是绝对不行的,那么我肯定会研究 SQLAlchemy。
    • SQLAlchemy 用 JOIN 做了很多事情。有时,只编写 SQL 比了解 SQLAlchemy 如何生成 SQL 更容易。我只是试图给你一些固执己见的理由,但是psycopg2 很棒,甚至 SQLAlchemy 都使用它。 :) 继续psycopg2
    • 你的回答给了我一些观点。我现在正在考虑 SQLAlchemy。另外,发现了一些有价值的信息here
    猜你喜欢
    • 2013-08-03
    • 2021-01-06
    • 1970-01-01
    • 2018-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多