MySQLdb和oursql都不允许返回的准备好的语句由连续执行的参数填充。还有其他人吗?
至少对于我们来说,我们的sql似乎比 MySQLdb 更熟练,.executemany()
因为SQL语句只为所有提交的值准备一次。
(Python 是否支持在 PostgreSQL 中准备和重用准备好的语句?)
对于您的 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;
假设 bar 是主键以下内容可能不安全:
SELECT * FROM foo WHERE bar < $1
SELECT * FROM foo WHERE baz = $1
其中 baz 可能有很大一部分行具有相同的值。