UPDATE
根据Nathan的建议传递execute()行列表后,代码执行得更远,但仍然卡在执行函数上.错误消息显示:
query = query % db.literal(args)
TypeError: not all arguments converted during string formatting
所以它仍然无法正常工作.有人知道为什么现在有类型错误吗?
结束更新
我有一个.xls格式的大型邮件列表.我使用python和xlrd从xls文件中检索名称和电子邮件到两个列表.现在我想把每个名字和电子邮件放到一个mysql数据库中.我正在使用MySQLdb这部分.显然,我不想为每个列表项执行insert语句.
这是我到目前为止所拥有的.
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,’操作数应该包含1列’)我最初尝试将我的查询放入var中,但之后它只是关于将元组传递给execute()的消息.
我究竟做错了什么?这甚至可能吗?
列表很大,我绝对无法将插入放入循环中.我看着使用LOAD DATA INFILE,但我真的不明白如何格式化文件或查询,当我必须阅读MySQL文档时,我的眼睛流血.我知道我可以使用一些在线xls到mysql转换器,但这对我来说也是一个学习练习.有没有更好的办法?