如何使用pgdb.executemany?

时间:2011-07-19 02:24:24

标签: python database postgresql parameters pgdb

我正在尝试使用pgdb模块从Python执行insert语句到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)

这给我一个错误,指向?。这种参数化查询的正确语法是什么?另外,如果这是在文档中,我在哪里可以找到它?

1 个答案:

答案 0 :(得分:6)

你想要

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

使用paramstyle模块级常量可以找到DBAPI驱动程序支持哪种参数包含样式。根据{{​​3}}(又名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'