Проверьте, существует ли запись из базы данных в CSV-файле - PullRequest
0 голосов
/ 25 апреля 2018

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

У меня есть CSV-файл, содержащий около 10 тыс. Записей.У меня также есть база данных с соответствующими записями.У меня есть четыре поля внутри обеих этих структур: назначение , countryCode , префикс и стоимость

Каждый раз, когда яобновить базу данных с помощью этого .csv-файла. Я должен проверить, существует ли запись с указанным destination , countryCode и prefix , и если это так, я должен обновить стоимость .Это довольно просто и работает нормально.

Но тут возникает сложная часть: есть вероятность, что destination может быть удален из одного CSV-файла в другой, и мне нужнознать об этом и удалить эту неиспользуемую запись из базы данных.Какой самый эффективный способ справиться с такой ситуацией?

Я действительно не хотел бы проверять каждую запись из базы данных, каждую строку в файле .csv: это звучит как очень плохая идея.Я думал о некоторой метке time_stamp или просто переменной bool, которая скажет мне, была ли запись изменена во время последнего обновления DB, НО: есть также вероятность того, что ни один из параметров в записи не изменится, таким образом: нет необходимости касаться этогозапишите и пометьте его как измененный.

Для этой задачи я использую Python 3 и mysql.connector lib.

Любые идеи и советы будут оценены :)

Ответы [ 2 ]

0 голосов
/ 07 мая 2018

Если .CSV является заменой для существующей таблицы:

CREATE TABLE new LIKE real;
load the .csv into `new`  (Probably use LOAD DATA...)
RENAME TABLE real TO old, new TO real;
DROP TABLE old;

Если у вас есть веские основания сохранить старую таблицу и исправить ее, то ...

  1. загрузить .csv в таблицу
  2. добавить подходящие индексы
  3. do один SQL для удаления (цикл не требуется).Это, вероятно, мульти-таблица DELETE.
  4. do one sql для обновления цен (без необходимости петли).Вероятно, это мульти-таблица UPDATE.

Вы можете выполнить всю задачу (в любом случае), не касаясь Python.

0 голосов
/ 25 апреля 2018

Если у вас есть отметка времени, зачем вам обновление, даже если в записи ничего не изменилось?Если причина в том, что вы хотите сохранить дату последнего обновления, вы можете добавить еще один столбец, сохранив отметку времени последнего времени, когда запись появилась в CSV, и послесловия удаляют все записи, в которых значение этого столбца меньше.чем дата последнего csv.

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