我正在使用 MySQL Connector/Python 1.0.11 和 Python 3.3 和 MySQL 5.6.12 通过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对象是一个枚举器(它定义了iter和next),而不是一个序列。我显然可以通过'list(my_csv_reader)',但我很确定这并不懒惰,这些文件可以有 10^6+ 行。有没有办法懒惰地通过?还是我在浪费时间,因为 executemany() 会在执行 INSERT 之前扩展列表?(来自 cursor.py 的提示:“INSERT 语句通过批处理数据进行优化,即使用 MySQL 多行语法。”)也许类似于将迭代器包装在生成器中,ala http://www.logarithmic.net/ pfh/blog/01193268742。我非常期待你的想法!