私は、PythonとそのMySQLdbモジュールを使用して、測定データをMysqlデータベースにインポートしています。私たちが持っているデータの量はかなり高いです(現在、約250 MBのCSVファイルとそれ以上のものがあります)。Python + MySQLdb executemany
現在、私はcursor.execute(...)を使用していくつかのメタデータをインポートしています。これにはいくつかのエントリしかないので問題はありません。
問題は、私は実際の測定データの大量をインポートする)(cursor.executemanyを使用しようとすると、のMySQLdbは
TypeError: not all arguments converted during string formatting
私の現在のコードは
def __insert_values(self, values):
cursor = self.connection.cursor()
cursor.executemany("""
insert into values (ensg, value, sampleid)
values (%s, %s, %s)""", values)
cursor.close()
で上昇させることですvalues
は、それぞれ3つの文字列を含むタプルのリストです。どのようなアイデアがこれに間違っているのでしょうか?
編集:
値は
yield (prefix + row['id'], row['value'], sample_id)
によって生成され、その行であり、イテレータがcsv.DictReader
から来る時にリスト千に読み込まれます。
値に正しいデータが含まれていることを確認しましたか? さて、LOAD LOCAL DATA INFILEを使用して見てください。それはずっと速くなることができます。 –
問題は、データを前処理する必要があることです(これは現在同じPythonスクリプトで実行されています)。そのような大きなデータセットの冗長コピーを作成することはあまり実行可能ではありません。 デバッガで確認したので、値はokです。 – lhahne