Как использовать pgdb.executemany? - PullRequest
6 голосов
/ 19 июля 2011

Я пытаюсь выполнить insert операторы из Python в PostgreSQL с помощью модуля pgdb.

Я вижу, что документация гласит:

    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)

Это дает мне ошибку, указывая на ?. Каков правильный синтаксис для этого вида параметризованного запроса? Кроме того, если это находится в документации, где я могу найти это?

1 Ответ

6 голосов
/ 19 июля 2011

Вы хотите

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

Какой стиль для включения параметров поддерживается вашим драйвером DBAPI, можно найти с помощью константы уровня модуля paramstyle.Согласно PEP 249 (спецификация API базы данных Python 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'
...