Python MySQLdb executemany错误

时间:2013-12-12 19:43:11

标签: python python-2.7 mysql-python

我使用以下代码:

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,它运行正常。什么想法可能会出错?

1 个答案:

答案 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()]