是否可以使用映射(字典)执行MySQLdb executemany函数

时间:2012-07-04 04:55:20

标签: python mysql-python

我知道我们可以这样使用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序列中找到。

1 个答案:

答案 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,因为它不会对您的参数名称做任何假设。