4

MySQLdbもoursqlも、連続する実行のパラメータによって満たされた準備済みステートメントを返すことを許可しません。他にもありますか?

SQL ステートメントは送信されたすべての値に対して 1 回だけ準備されるため、少なくとも.executemany() oursqlはMySQLdbよりも熟練しているようです。

(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 つは、準備済みステートメントが最初の実行時に計画され、その計画が再利用されることです。これは、同じプランが均一に必要なクエリ (単純な挿入など) ではうまく機能しますが、新しいプランが必要になるほどパラメーターが変更される可能性があるという問題が発生します。したがって、ほとんどの場合、次のことで問題ない可能性があります (注意が必要な厄介なケースがまだあります)。

  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 に答える