2014-01-24 142 views
0

我有這樣的代碼:Mysql,對字典中的數據執行所有命令。 Python的

sql = r"INSERT INTO table(par1,par2) VALUES ('%s',%d) 
ON DUPLICATE KEY UPDATE par2=par2+VALUES(par2)" 

(主鍵是PAR1) 和看起來這樣

dict = {'http://smth.com': 3, 
     'http://smth2.com': 4} 

的第一個值是一個字符串,另一個是數字Python字典。 當我嘗試做cursor.executemany(SQL,字典),它提出了這樣的錯誤:

TypeError: %d format: a number is required, not str 

我能做些什麼?

回答

0

這是python無法將字典的值替換爲sql

不知道字典的作品,但according to the documentation,元組列表做這項工作:

data = [ 
    ('http://smth.com', 3), 
    ('http://smth2.com', 4), 
] 
1

在字典默認的迭代器只產生了字典的鍵,如:

for k in dict(a=1, b=2, c=3): 
    print k 

將只打印「a」,「b」和「c」,而你需要鍵值和sql替換值。

使用iteritems相反,這些收益率 「完成」(鍵,值)對:

cursor.executemany(sql, dict.iteritems()) 

參見: http://docs.python.org/2/library/stdtypes.html#dict.iteritems

順便說一句,根據: http://mysql-python.sourceforge.net/MySQLdb.html#some-examples 您的格式說明符應該可能都是普通的%s