Как лениво передать строки csv в executemany()?

Я использую MySQL Connector/Python 1.0.11 с Python 3.3 и MySQL 5.6.12 для загрузки CSV-файла в таблицу с помощью cursor.executemany('INSERT INTO... VALUES'). С sqlite3 или psycopg2 я могу передать объект _csv.reader для seq_of_parameters, но MySQL завершается неудачно с:

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

Достаточно справедливо, поскольку в документах говорится, что это должна быть последовательность, а объект _csv.reader является перечислителем (он определяет iter и next), а не последовательностью. Я мог бы, очевидно, передать "список (my_csv_reader)", но я уверен, что это не ленивый, и эти файлы могут иметь 10^6+ строк. Есть ли способ передать это лениво? Или я трачу впустую свое время, потому что executemany() расширит список перед выполнением INSERT? (Подсказка от cursor.py: "Операторы INSERT оптимизируются путем пакетирования данных, то есть с использованием синтаксиса MySQL с несколькими строками.") Может быть, что-то вроде обертывания итератора в генераторе, аля http://www.logarithmic.net/pfh/blog/01193268742. Я очень жду ваших мыслей!

0 ответов

Другие вопросы по тегам