我正在尝试使用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)
这给我一个错误,指向?
。这种参数化查询的正确语法是什么?另外,如果这是在文档中,我在哪里可以找到它?
答案 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'