我目前在将 python 列表列表导出到 mySQL 数据库时遇到问题。 我正在使用 MySQLdb 并使用 executemany 命令。
比如我有一个list列表:
k1=[[['Bob', 'Alfred', 'Jen'],
['123 Elm Street', '55 Ninth Ave', '1 Paved Rd'],
[00123, 34565, 30094],
['Newark', 'Salinas', 'Los Angeles'],
['NJ', 'CA', 'CA']],[['Bob1', 'Alfred1', 'Jen1'],
['123 Elm Street1', '55 Ninth Ave1', '1 Paved Rd1'],
[001231, 345651, 300941],
['Newark1', 'Salinas1', 'Los Angeles1'],
['NJ1', 'CA1', 'CA1']]]
然后我尝试(在初始化游标和要使用的数据库之后):
cursor.executemany('''INSERT INTO addresses
(name, street, zipcode, city, state)
VALUES
(%s, %s, %s, %s, %s)''',zip(k1))
我得到一个错误:
_mysql_exceptions.ProgrammingError: not enough arguments for format string
好吧,基本上,我想要从列表 k1 到 mySQL 数据库表“地址”的名称、街道、邮政编码、城市和州以及相应的字段条目。
如果有人能指出我正确的方向,那就太好了。
最佳答案
你的数据结构真的很尴尬。我假设您想将 k1 转换为:
>>> sum([zip(*x) for x in k1], [])
<<<
[('Bob', '123 Elm Street', 83, 'Newark', 'NJ'),
('Alfred', '55 Ninth Ave', 34565, 'Salinas', 'CA'),
('Jen', '1 Paved Rd', 30094, 'Los Angeles', 'CA'),
('Bob1', '123 Elm Street1', 665, 'Newark1', 'NJ1'),
('Alfred1', '55 Ninth Ave1', 345651, 'Salinas1', 'CA1'),
('Jen1', '1 Paved Rd1', 300941, 'Los Angeles1', 'CA1')]
现在你可以执行很多:
sql = "INSERT INTO addresses (name, street, zipcode, city, state) VALUES (%s, %s, %s, %s, %s)"
data = sum([zip(*x) for x in k1], [])
cursor.executemany(sql, data)
关于Python 到 SQL : list of lists,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5905721/