我知道我们可以这样使用executemany:
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(operation,seq_of_parameters)
准备数据库操作(查询或命令)然后 对所有参数序列或映射执行它 在seq_of_parameters序列中找到。
答案 0 :(得分: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,因为它不会对您的参数名称做任何假设。