2010-05-27 5 views
1

Проблема простая. Когда я выполняю следующий я получаю разные результаты в зависимости от того, работать я его из консоли MySQL и изнутри Python сценарий с использованием MySQLdb:Python MySQLdb LOAD LOCAL INFILE проблемы

LOAD DATA LOCAL INFILE '/tmp/source.csv' INTO TABLE test 
FIELDS TERMINATED BY '|' 
IGNORE 1 LINES; 

Консоли дает следующие результаты:

  • записи: 35002 Удалено: 0 пропущено: 0 Предупреждения: 0

Python (через .info()) возвращает следующее:

  • записей: 34977 Удален: 0 пропущено: 0 Предупреждения: 8

Таким образом, в целом, тот же исходный файл, тот же запрос SQL, различные результаты.

С консоли я могу «ПОКАЗАТЬ ПРЕДУПРЕЖДЕНИЯ» получить лучший дескриптор, из-за которого возникают проблемы, и почему, но из Python я не могу определить, как это сделать или что еще более важно, что может быть причиной проблемы ,

Любые предложения?

  • MySQL Server '5.1.41-3ubuntu12.1'
  • Python '2.6.5'
  • Таблицы MyISAM
+1

Вы пытались изолировать одну строку, которая дает другое поведение? Вы можете делить пополам (делить завоевателя), чтобы изолировать линию, которая дает разные результаты в O (log (n)) времени программиста. –

+0

После многих недель я пришел к выводу, что LOAD DATA LOCAL ... очень чувствителен к последнему значению столбца, особенно если это NULL. Простое изменение порядка столбцов работало для одного и того же файла данных ... но, как и большинство вещей, всегда существует обходной путь низкого уровня. – belvoir

ответ

1

После загрузки данных, выполнить

SELECT @@warning_count; 

проверить, превышает ли это значение 0. Если это не выполнено

SHOW WARNINGS; 

и сбрасывать результат (возвращает 3 столбца: уровень, код, сообщение) или выдавать исключение. Вы можете выполнять оба утверждения точно так же, как и любой другой запрос select из.

+0

После неудачной попытки запроса SELECT @@ warning_count ;, я обнаружил, что в MySQLdb или более конкретно _mysql вам нужно использовать conn.warning_count(), чтобы получить счетчик предупреждений, иначе вы, как правило, получаете команды 2014 из-за ошибки синхронизации , – belvoir

Смежные вопросы