У меня возникли проблемы с сценарием Python, который в основном только анализируя CSV-файл строку за строкой, а затем вставляя каждую строку в таблицу MySQL, используя для цикла:Python MySQL запрос не завершения
f = csv.reader(open(filePath, "r"))
i = 1
for line in f:
if (i > skipLines):
vals = nullify(line)
try:
cursor.execute(query, vals)
except TypeError:
sys.exc_clear()
i += 1
return
в случае, если запрос имеет вид:
query = ("insert into %s" % tableName) + (" values (%s)" % placeholders)
Это работает прекрасно с каждым файлом используется для с одним исключением - самого большого файла. Он останавливается в разных точках каждый раз - иногда он достигает 600 000 записей, иногда 900 000. Но всего около 4 000 000 записей.
Я не могу понять, почему он это делает. Тип таблицы - MyISAM. Доступно много свободного места на диске. Когда он останавливается, таблица достигает около 35 МБ. max_allowed_packet
установлен в 16 МБ, но я не думаю, что это проблема, поскольку она выполняется по очереди.
У кого-нибудь есть идеи, что это может быть? Не уверен, что за это отвечает Python, MySQL или MySQLdb.
Заранее спасибо.
Есть ли причина, по которой вы не можете использовать встроенную функцию импорта CSV MySQL? http://dev.mysql.com/doc/refman/5.1/en/load-data.html –
Когда вы говорите, что это «останавливается», вы могли бы разработать? Вызывает ли это исключение, становится невосприимчивым и т. Д.? – swanson
Причина, по которой я решил не использовать 'LOAD DATA', заключается в том, что я буду добавлять функции, которые будут изменять каждую запись, прежде чем вставлять их. Возможно, было бы лучше изменить каждую строку в новом CSV-файле, а затем использовать 'LOAD DATA' для импорта нового CSV-файла? – edanfalls