我无法通过python将记录插入mysql,如下所示:
songs = ['abc','bbb']
for i in songs:
cur.execute("INSERT INTO song (title) VALUE (%s)", i)
我收到如下错误:
回溯(最近一次呼叫最后):文件“”,第2行,in 文件 “/usr/local/lib/python2.7/dist-packages/MySQLdb/cursors.py”,第187行, 执行中 query = query%tuple([db.literal(item)for args中的item])TypeError:并非在字符串格式化过程中转换所有参数
我的问题排查步骤:
插入单独的:
cur.execute('INSERT INTO song (title) VALUE ("haha")')
- >成功
仅使用“for”脚本插入列表中的一个字符:
songs = ['a','b','c']
for i in songs:
`cur.execute("INSERT INTO song (title) VALUE (%s)", i)`
--->成功
答案 0 :(得分:1)
使用像这样的字符串作为第二个参数不起作用。这里的问题是execute()
的第二个参数应该是一个序列(列表,元组等)。字符串本身就是一系列字符:['a', 'b', 'c']
在您的示例中,第一个字符(a
)被视为第一个格式参数(%s
)。在那之后,字符串的其余部分被认为是#34;太多"参数。
您需要传递第一项是字符串的序列:
cur.execute("INSERT INTO song (title) VALUES (%s)", (i,))
这表示元组(序列)包含一个元素i
。
请注意,这与@ kuro的答案不同,因为它允许库正确地转义值,这样更安全,并正确处理不同的值类型。
答案 1 :(得分:-1)
我认为你应该使用:
cur.execute("INSERT INTO song (title) VALUES (%s)", i)
答案 2 :(得分:-2)
如果你想跟着你,请尝试 -
songs = ['a','b','c']
for i in songs:
cur.execute("INSERT INTO song (title) VALUES ('%s')" %(i,))
#Use commit here or turn auto-commit on
看一下这个链接 -
https://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlcursor-execute.html