我使用以下代码:
time = [[],[],[]]
for f,v in mydict.iteritems():
fsplit = f.split('#')
time[0].append(int(v))
time[1].append(fsplit[0])
time[2].append(fsplit[1])
cursor.executemany("Update MyDB Set timetaken = '%d' Where id = '%s' and source = '%s'",time)
执行时出现以下错误:
TypeError: %d format: a number is required, not str
该列表具有适当填充的值,如果我迭代并在列表的各个项目上使用cursor.execute,它运行正常。什么想法可能会出错?
答案 0 :(得分:3)
始终使用%s
作为SQL参数占位符,不要自己引用:
cursor.executemany("Update MyDB Set timetaken = %s Where id = %s and source = %s", time)
SQL参数占位符不与Python字符串格式化占位符相同;他们碰巧使用类似的语法。
您还需要按行建立商品,而不是每列:
rows = []
for f, v in mydict.iteritems():
id, source = f.split('#')
rows.append((int(v), one, two))
或使用列表理解:
rows = [[int(v)] + f.split('#') for f, v in mydict.iteritems()]