2012-07-04 79 views
0

我知道,我們可以使用executemany這樣:是否有可能使用映射來執行MySQLdb的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規範2.0版本

.executemany(operation,seq_of_parameters)

準備數據庫操作(查詢或命令),然後 針對在序列seq_of_parameters中找到的所有參數序列或映射 執行它。

回答

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可能無法實現使用模板,但簡單地使用字符串.format,因爲它不會對你的參數名稱做任何假設。

+0

也許MySQLdb只是不支持它。使用元組的序列就好了 – suyugo