【问题标题】:prepared statements using psycopg使用 psycopg 准备好的语句
【发布时间】:2021-11-08 02:11:37
【问题描述】:

我是 python 的初学者。我们使用这段代码来执行 SQL 命令。

cur.execute("INSERT INTO test (num, data) VALUES (%s, %s)", (100, "abcdef"))

我想知道这是准备好的声明还是只是客户端引用?

【问题讨论】:

标签: postgresql python-3.x prepared-statement psycopg


【解决方案1】:

不,它没有,至少对于 psycopg2 来说不是。文档中的“Prepare”指的是“PREPARE TRANSACTION”,它与准备好的语句完全不同。

但是,您可以通过覆盖方法或执行额外的语句来模拟准备好的语句。见:An example of psycopg2 cursor supporting prepared statements

请看:relevant blog entry for psycopg.

更多信息:

http://www.postgresql.org/docs/9.2/static/sql-prepare.html
http://www.postgresql.org/docs/current/static/sql-prepare-transaction.html

【讨论】:

    【解决方案2】:

    psycopg 从版本 3 开始支持准备好的语句:

    https://www.psycopg.org/psycopg3/docs/advanced/prepare.html#prepared-statements

    查询在连接上执行超过 prepare_threshold 次后会自动准备。

    【讨论】:

      【解决方案3】:

      根据the docs,execute 方法将“准备并执行数据库操作(查询或命令)。”。所以是的,这是一个准备好的声明。

      【讨论】:

      • 其实目前没有。本文档中的“Prepare”是指两阶段提交所需的“PREPARE TRANSACTION”调用,而不是预编译的 SQL 语句。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-22
      • 2012-12-01
      相关资源
      最近更新 更多