0

次のように executemany を使用できることはわかっています。

sql = "insert into a(c1,c2,c3) values(%s,%s,%s)"
seq_of_parameters = [('a','b','c'),('a','b','c')]
cu.executemany(sql,seq_of_parameters)

なぜこれが機能しないのだろうか:

sql = "insert into a(c1,c2,c3) values(%(c1)s,%(c2)s,%(c3)s)"
seq_of_parameters = [{'c1':'a','c2':'b','c3':'c'},{'c1':'a','c2':'b','c3':'c'}]
cu.executemany(sql,seq_of_parameters)

PEP249 Python データベース API 仕様 v2.0 より

.executemany(操作、seq_of_parameters)

データベース操作 (クエリまたはコマンド) を準備 し、シーケンス seq_of_parameters で見つかったすべてのパラメーターシーケンスまたはマッピングに対して実行します。

4

1 に答える 1

0

%(c1)sおそらく、を使用するのではなく、を使用する別の方法でマッピングをサポートしています

params = [ ('c1', 1), ('c2', 2) ]
executemany("insert into a(c1, c2) values (?, ?)", params)

あなたはこれを試すことができます:

from string import Template
Template('$c1, $c3, $c3').safe_substitute({'c1':1, 'c2':2, 'c3':3})

executemany は、テンプレートを使用して実装するのではなく、単に string.format を使用して実装する場合があります。これは、パラメーター名を想定していないためです。

于 2012-07-04T05:02:40.830 に答える