6

我正在尝试insert使用 pgdb 模块执行从 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 回答