У меня есть сценарий 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.
Мой вопрос A) какой из вышеупомянутых методов является "лучшим" и "самым чистым"? (Скорость не действительно проблема.) и B) как я достиг бы № 1 или № 4?
Заранее спасибо :)
Я думаю, у вас будет больше всего контроля и меньше всего работы с вариантом #3, особенно если вы хотите сохранить существующие значения поверх нулевых, я думаю, вы рискуете перезаписать их с вариантом #1.
Если скорость не является проблемой, для каждой записи в CSV, сравните ее с существующей записью, и обновите или вставьте запись с предпочтительными значениями.