У меня есть скрипт Python, который использует интерфейс MySQLdb для загрузки различных файлов CSV в таблицы MySQL.
В своем коде я использую стандартную библиотеку CSV Python для чтения CSV, затем вставляю каждое поле в таблицу по одному, используя запрос INSERT
. Я делаю это вместо использования LOAD DATA
, чтобы можно было преобразовывать нулевые значения и другие незначительные очистки для каждого поля.
Пример формата таблицы:
`id_number` | `iteration` | `date` | `value`
102 | 1 | 2010-01-01 | 63
102 | 2 | 2010-01-02 | NULL
102 | 3 | 2010-01-03 | 65
Нулевое значение во второй итерации id_number = 102
представляет случай, когда value
не изменился по сравнению с предыдущим днем, т.е. value
остается 63.
По сути, мне нужно преобразовать эти нулевые значения в их правильные значения. Я могу представить 4 способа сделать это:
После того, как все вставлено в таблицу, выполните запрос MySQL, который выполняет итерацию и заменяет все сам.
Как только все будет вставлено в таблицу, запустите запрос MySQL, чтобы отправить некоторые данные обратно в Python, обработайте в Python, а затем запустите запрос MySQL, чтобы обновить правильные значения.
Выполняйте обработку в Python для каждого поля перед каждой вставкой.
Вставить во временную таблицу и использовать SQL для вставки в основную таблицу.
Я мог бы, вероятно, решить, как сделать # 2 и, возможно, # 3, но понятия не имею, как сделать # 1 или # 4, что я думаю, являются лучшими методами, так как тогда не требуется никаких фундаментальных изменений в коде Python. .
Мой вопрос: а) какой из перечисленных методов является «лучшим» и «самым чистым»? (Скорость на самом деле не проблема.) И Б) как бы я достиг # 1 или # 4?
Заранее спасибо:)