1

Python 3.3 および MySQL 5.6.12 で MySQL Connector/Python 1.0.11 を使用して、cursor.executemany ('INSERT INTO ... VALUES') を介して csv ファイルをテーブルにロードしています。sqlite3 または psycopg2 を使用すると、seq_of_parameters に _csv.reader オブジェクトを渡すことができますが、MySQL は次のエラーで失敗します。

mysql.connector.errors.ProgrammingError: Parameters for query must be list or tuple.

ドキュメントではシーケンスでなければならず、_csv.readerオブジェクトは列挙子( iternextを定義する) であり、シーケンスではありません。もちろん、'list(my_csv_reader)' を渡すこともできますが、これは遅延ではないと確信しており、これらのファイルには 10^6+ 行を含めることができます。それを怠惰に渡す方法はありますか?または、INSERT を実行する前に executemany() がリストを展開するので、時間を無駄にしていますか? (cursor.py からのヒント:「INSERT ステートメントは、データをバッチ処理することによって最適化されます。つまり、MySQL の複数行の構文を使用します。」) イテレータをジェネレーターでラップするようなものかもしれません。ala http://www.logarithmic.net/ pfh/blog/01193268742 . あなたの考えをとても楽しみにしています!

4

0 に答える 0