4

MySQLdb和oursql不允许返回的准备好的语句由连续执行的参数填充。还有其他人吗?

至少对于我们来说,我们的sql似乎比 MySQLdb 更熟练,.executemany() 因为SQL语句只为所有提交的值准备一次。

(Python 是否支持在 PostgreSQL 中准备和重用准备好的语句?)

4

1 回答 1

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. SELECT * FROM foo WHERE bar= $1;假设 bar 是主键

以下内容可能不安全:

  1. SELECT * FROM foo WHERE bar < $1
  2. SELECT * FROM foo WHERE baz = $1其中 baz 可能有很大一部分行具有相同的值。
于 2013-05-14T01:39:35.180 回答