6

insertpgdbモジュールを使用してPythonからPostgreSQLへのステートメントを実行しようとしています。

ドキュメントに次のように書かれているのがわかります。

    cursor.executemany(query, list of params)
    # Execute a query many times, binding each param dictionary
    # from the list.

だから私は次のようなことを試みています:

>>> insert = "insert into foo (name, number) values (?,?);"
>>> params = [{ 'name': 'John', 'number': 123 }, { 'name': 'Jack', 'number': 234 }]
>>> cursor.executemany(insert, params)

これは私にエラーを与えており、を指してい?ます。この種のパラメーター化されたクエリの正しい構文は何ですか?また、これがドキュメントにある場合、どこにありますか?

4

1 に答える 1

6

あなたが欲しい

insert = "insert into foo (name, number) value (%(name)s, %(number)s);"

DBAPIドライバーでサポートされているパラメーターを含めるスタイルは、paramstyleモジュールレベルの定数で確認できます。PEP 249(別名pythonデータベースAPI 2仕様)によると:

インターフェイスで期待されるパラメータマーカーのフォーマットのタイプを示す文字列定数。可能な値は[2]です。

'qmark'         Question mark style, 
                e.g. '...WHERE name=?'
'numeric'       Numeric, positional style, 
                e.g. '...WHERE name=:1'
'named'         Named style, 
                e.g. '...WHERE name=:name'
'format'        ANSI C printf format codes, 
                e.g. '...WHERE name=%s'
'pyformat'      Python extended format codes, 
                e.g. '...WHERE name=%(name)s'

pgdbをチェックすると、次のことがわかります。

>>> import pgdb
>>> pgdb.paramstyle
'pyformat'
于 2011-07-19T06:37:58.787 に答える