UPDATE
以下のネイサンの提案に従ってexecute()に行のリストを渡した後、コードはさらに実行されますが、execute関数でスタックします。エラーメッセージは次のとおりです。
query = query % db.literal(args)
TypeError: not all arguments converted during string formatting
したがって、まだ機能していません。なぜ今タイプエラーがあるのか誰か知っていますか?
更新を終了
.xls形式の大きなメーリングリストがあります。xlrdでpythonを使用して、xlsファイルから2つのリストに名前と電子メールを取得しています。次に、それぞれの名前と電子メールを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へのコンバーターを使用できることを知っていますが、これは私にとっても学習演習です。もっと良い方法はありますか?