更新
在按照 Nathan 的建议通过 execute() 行列表之后,代码执行得更远,但仍然卡在执行函数上。错误消息如下:
query = query % db.literal(args)
TypeError: not all arguments converted during string formatting
所以它仍然无法正常工作。有人知道为什么现在出现类型错误吗?
结束更新
我有一个 .xls 格式的大型邮件列表。我正在使用 python 和 xlrd 将 xls 文件中的名称和电子邮件检索到两个列表中。现在我想把每个名字和电子邮件放入一个 mysql 数据库。我在这部分使用 MySQLdb。显然我不想为每个列表项做一个插入语句。
这是我到目前为止所拥有的。
from xlrd import open_workbook, cellname
import MySQLdb
dbname = 'h4h'
host = 'localhost'
pwd = 'P@ssw0rd'
user = 'root'
book = open_workbook('h4hlist.xls')
sheet = book.sheet_by_index(0)
mailing_list = {}
name_list = []
email_list = []
for row in range(sheet.nrows):
"""name is in the 0th col. email is the 4th col."""
name = sheet.cell(row, 0).value
email = sheet.cell(row, 4).value
if name and email:
mailing_list[name] = email
for n, e in sorted(mailing_list.iteritems()):
name_list.append(n)
email_list.append(e)
db = MySQLdb.connect(host=host, user=user, db=dbname, passwd=pwd)
cursor = db.cursor()
cursor.execute("""INSERT INTO mailing_list (name,email) VALUES (%s,%s)""",
(name_list, email_list))
游标执行时的问题。这是错误:_mysql_exceptions.OperationalError: (1241, 'Operand should contain 1 column(s)')
我最初尝试将我的查询放入一个 var 中,但随后它只是发出一条关于将元组传递给 execute() 的消息。
我究竟做错了什么?这甚至可能吗?
列表很大,我绝对不能将插入放入循环中。我查看了使用 LOAD DATA INFILE,但我真的不明白如何格式化文件或查询,当我不得不阅读 MySQL 文档时我的眼睛流血了。我知道我可能会使用一些在线 xls 到 mysql 转换器,但这对我来说也是一个学习练习。有没有更好的方法?