Вы также можете использовать команду MySQL. Load data infile
.
Это будет делать то, что вам нужно, намного быстрее, чем отдельные вставки, плюс вам не понадобится никакой Perl-код для чтения строк.
Пример
sql = """LOAD DATA INFILE '/var/test/test1.txt' INTO TABLE table1"""
cursor.execute(sql)
Загрузка данных infile имеет множество опций для разделителей полей и строк, проверить это можно по адресу:
http://dev.mysql.com/doc/refman/5.1/en/load-data.html
Чтобы загрузить файл, содержащий
6666, 'test'
использование
LOAD DATA INFILE 'c:/test.txt' INTO TABLE `test`
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\''
LINES TERMINATED BY '\r\n';
Обратите внимание на использование прямой косой черты в путях к файлам (даже в Windows) и '\''
для помещения одинарных кавычек в две кавычки '
. Терминатор строки подходит для Windows, Linux потребуется LINES TERMINATED BY '\n'
.
Если вы действительно ленивый
Создайте событие MySQL.
DELIMITER $$
CREATE EVENT import_file
ON SCHEDULE
EVERY 1 MINUTE
DO BEGIN
LOAD DATA INFILE 'c:/test.txt' INTO TABLE `test` IGNORE
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\''
LINES TERMINATED BY '\r\n';
END$$
DELIMITER ;
Ключевое слово IGNORE
пропустит поля, которые вызывают нарушение первичного или уникального ключа, поэтому оно не будет пытаться импортировать эти записи.
Определите правильное поле как уникальное, чтобы MySQL не импортировал повторяющиеся записи.
Подробнее о событиях
См .: http://dev.mysql.com/doc/refman/5.1/en/create-event.html