【发布时间】: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
我是 python 的初学者。我们使用这段代码来执行 SQL 命令。
cur.execute("INSERT INTO test (num, data) VALUES (%s, %s)", (100, "abcdef"))
我想知道这是准备好的声明还是只是客户端引用?
【问题讨论】:
标签: postgresql python-3.x prepared-statement psycopg
不,它没有,至少对于 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
【讨论】:
psycopg 从版本 3 开始支持准备好的语句:
https://www.psycopg.org/psycopg3/docs/advanced/prepare.html#prepared-statements
查询在连接上执行超过 prepare_threshold 次后会自动准备。
【讨论】:
根据the docs,execute 方法将“准备并执行数据库操作(查询或命令)。”。所以是的,这是一个准备好的声明。
【讨论】: