是否有Python MySQL API返回Prepared Statements以供重用?

时间:2013-04-05 11:12:59

标签: python mysql postgresql prepared-statement

MySQLdboursql都不允许返回prepared statements由连续执行的参数填充。还有其他人吗?

至少.executemany() 我们的似乎比 MySQLdb 更精通,因为SQL语句只为所有提交的值准备一次。

(Python是否支持使用PostgreSQL准备和重复使用Prepared Statements?)

1 个答案:

答案 0 :(得分:0)

对于你的PostgreSQL问题,答案是至少从去年10月开始,没有特定于Python的方法来处理预准备语句(我不是Python程序员,但这在各种语言中相当普遍)。然而,PostgreSQL提供了一种SQL语言方式,因此如果可以执行SQL查询,任何语言都可以使用预准备语句。有关如何在Python中执行此操作的代码示例,请参阅http://initd.org/psycopg/articles/2012/10/01/prepared-statements-psycopg/

但有几个主要的警告。其中之一是首次运行计划准备的报表,并重新使用该计划。这对于统一需要相同计划的查询(例如,简单插入)非常有用,但它会导致参数可能发生更改以至于可能需要新计划的问题。所以在大多数情况下可能会出现以下情况(仍有令人讨厌的角落情况需要注意):

  1. INSERT INTO foo (bar) values ($1)
  2. 假设栏是主键
  3. SELECT * FROM foo WHERE bar= $1;
  4. 以下内容可能不安全:

    1. SELECT * FROM foo WHERE bar < $1
    2. SELECT * FROM foo WHERE baz = $1其中baz可能有很大一部分行具有相同的值。