Как перебрать таблицу MySQL с помощью Python? - PullRequest
1 голос
/ 28 июня 2010

У меня есть скрипт 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 способа сделать это:

  1. После того, как все вставлено в таблицу, выполните запрос MySQL, который выполняет итерацию и заменяет все сам.

  2. Как только все будет вставлено в таблицу, запустите запрос MySQL, чтобы отправить некоторые данные обратно в Python, обработайте в Python, а затем запустите запрос MySQL, чтобы обновить правильные значения.

  3. Выполняйте обработку в Python для каждого поля перед каждой вставкой.

  4. Вставить во временную таблицу и использовать SQL для вставки в основную таблицу.

Я мог бы, вероятно, решить, как сделать # 2 и, возможно, # 3, но понятия не имею, как сделать # 1 или # 4, что я думаю, являются лучшими методами, так как тогда не требуется никаких фундаментальных изменений в коде Python. .

Мой вопрос: а) какой из перечисленных методов является «лучшим» и «самым чистым»? (Скорость на самом деле не проблема.) И Б) как бы я достиг # 1 или # 4?

Заранее спасибо:)

1 Ответ

2 голосов
/ 28 июня 2010

Я думаю, что вы будете иметь максимальный контроль и наименьший объем работы с вашей опцией # 3, особенно если вы хотите сохранить существующие значения над нулевыми значениями, я думаю, вы рискуете перезаписать их с # 1.

Если скорость не является проблемой, для каждой записи в CSV сравните ее с существующей записью и обновите или вставьте свою запись с предпочитаемыми значениями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...