2012-07-04 5 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 파이썬 데이터베이스 API 사양 2.0에서

.executemany (작업, seq_of_parameters)

,515,

데이터베이스 조작 (조회 또는 명령)를 준비하고 은 시퀀스 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