2011-07-19 25 views
6

Estoy tratando de ejecutar insert declaraciones de Python a PostgreSQL utilizando el módulo pgdb.Cómo usar pgdb.executemany?

veo la documentación dice:

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

así que estoy tratando cosas como:

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

Esto me está dando un error, señalando la ?. ¿Cuál es la sintaxis correcta para este tipo de consulta parametrizada? Además, si esto está en la documentación, ¿dónde lo encuentro?

Respuesta

6

que quieren

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

Qué estilo para la inclusión de parámetros con el apoyo de su conductor DBAPI se puede encontrar con el paramstyle módulo de nivel constante. De acuerdo con el (especificación aka pitón API de base de datos 2) PEP 249:

constante de cadena que indica el tipo de marcador de parámetro formato esperado por la interfaz. Los valores posibles son [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' 

y si marca PGDB, verá que

>>> import pgdb 
>>> pgdb.paramstyle 
'pyformat'