MySQLdb和oursql都不允许返回prepared statements由连续执行的参数填充。还有其他人吗?
至少.executemany()
我们的似乎比 MySQLdb 更精通,因为SQL语句只为所有提交的值准备一次。
(Python是否支持使用PostgreSQL准备和重复使用Prepared Statements?)
答案 0 :(得分:0)
对于你的PostgreSQL问题,答案是至少从去年10月开始,没有特定于Python的方法来处理预准备语句(我不是Python程序员,但这在各种语言中相当普遍)。然而,PostgreSQL提供了一种SQL语言方式,因此如果可以执行SQL查询,任何语言都可以使用预准备语句。有关如何在Python中执行此操作的代码示例,请参阅http://initd.org/psycopg/articles/2012/10/01/prepared-statements-psycopg/
但有几个主要的警告。其中之一是首次运行计划准备的报表,并重新使用该计划。这对于统一需要相同计划的查询(例如,简单插入)非常有用,但它会导致参数可能发生更改以至于可能需要新计划的问题。所以在大多数情况下可能会出现以下情况(仍有令人讨厌的角落情况需要注意):
INSERT INTO foo (bar) values ($1)
SELECT * FROM foo WHERE bar= $1;
以下内容可能不安全:
SELECT * FROM foo WHERE bar < $1
SELECT * FROM foo WHERE baz = $1
其中baz可能有很大一部分行具有相同的值。