0

我知道我们可以这样使用executeman:

sql = "insert into a(c1,c2,c3) values(%s,%s,%s)"
seq_of_parameters = [('a','b','c'),('a','b','c')]
cu.executemany(sql,seq_of_parameters)

我想知道为什么这不起作用:

sql = "insert into a(c1,c2,c3) values(%(c1)s,%(c2)s,%(c3)s)"
seq_of_parameters = [{'c1':'a','c2':'b','c3':'c'},{'c1':'a','c2':'b','c3':'c'}]
cu.executemany(sql,seq_of_parameters)

来自 PEP249 Python 数据库 API 规范 v2.0

.executemany(操作,seq_of_parameters)

准备一个数据库操作(查询或命令),然后针对 在序列 seq_of_parameters 中找到的所有参数序列或映射执行它。

4

1 回答 1

0

可能它支持通过另一种方式映射,不是使用%(c1)s,而是使用

params = [ ('c1', 1), ('c2', 2) ]
executemany("insert into a(c1, c2) values (?, ?)", params)

你可以试试这个:

from string import Template
Template('$c1, $c3, $c3').safe_substitute({'c1':1, 'c2':2, 'c3':3})

executemany 可能不使用 Template 实现,而只是使用 string.format,因为它不对您的参数名称做出任何假设。

于 2012-07-04T05:02:40.830 回答