TypeError:在字符串格式化期间不是所有参数都被转换在Mysql中插入两个python列表

时间:2017-01-24 18:41:07

标签: python-2.7 mysql-python

我导入了MySQLdb,并建立了数据库连接。

我有两个列表如下:

var_list = ['INFY','WIPR','SUZY','BEL' .....]
var_list2 = ['infosys', 'wipro', 'suzlon', 'bharat electronics', .....]

我的目标是插入数据库。因此我写了以下两个字符串:

var_string = ', '.join('?' * len(varlist))
var_string2 = ','.join('?' * len(varlist2))

现在我尝试将值插入到MySQL表中,该表包含以下列:symbol(varchar)company(varchar)

query_string = 'INSERT INTO table VALUES (%s, %s);' %(var_string,var_string2)

cur.execute(query_string, (varlist,varlist2))

然而,这不起作用。

1 个答案:

答案 0 :(得分:1)

根据您的问题,我认为您的目标是进行批量插入。您可以按照以下方式修改代码,但我强烈建议不要

query_string = 'INSERT INTO table VALUES %s;'%(','.join('(%s,%s)'*len(varlist)))
flatten = tuple(x for xs in zip(varlist,varlist2) for x in xs)
cur.execute(query_string,flatten)

在这里,您将生成一个query_string,如下所示:

INSERT INTO table VALUES (%s,%s),(%s,%s),(%s,%s),(%s,%s),(%s,%s);

然后用元组('INFY','infosys','WIPR','wipro',...)

填写它

您可以更好地使用.executemany()

cur.executemany("INSERT INTO table VALUES (%s,%s);",zip(var_list,var_list2))

这将生成更长的查询,但结果更优雅,更安全。