Есть 2 xlsx файла с одинаковой структурой. Нужно спарсить оба на Python и изменения внести в БД MySQL
уважаемое комьюнити. Есть задача, надеюсь на ваши советы!
Есть 2 xlsx файла с одинаковой структурой. Нужно спарсить оба на Python и изменения внести в БД MySQL. То, что с желтым фоном это коллекция, под ней идут предметы входящие в нее они могут меняться, добавляться и удаляться.
Механизм работы такой, есть рабочий файл, он каждый раз заменяется на новый, а старый перемещается в архив. Нужно логировать удаление старых,изменения текущих и добавление новых коллекции и предметов в БД для последующего вывода на сайте.
Если в новом файле строка изменена или она есть в новом файле и нет в старом, и наоборот - эту строку нужно записать в формате было/стало или просто с информацией о добавлении и удалении.
Добавлю, что данные файла до текущей задачи просто парсились и добавлялись в таблицу перед этим она полностью очищалась. Все это происходит с помощью Cron'а на сервере, поэтому нужны варианты без личного вмешательства в будущем.
Так выглядит в БД. Логи будут в отдельной таблице
Ответы (1 шт):
Как я понял, исходное состояние - это файл считан питоном, распарсен и хранится в некоем виде, который соответствует показанной таблице.
Далее:
- Загружаем эти данные на MySQL в новую таблицу:
CREATE TABLE tmp LIKE main;
INSERT INTO tmp VALUES (массив данных);
- Обрабатываем и пишем логи:
INSERT INTO log
SELECT CONCAT_WS(',', 'Добавление', collection, category, exclusion)
FROM tmp
LEFT JOIN main USING (collection)
WHERE main.collection IS NULL;
INSERT INTO log
SELECT CONCAT_WS(',', 'Удаление', collection, category, exclusion)
FROM main
LEFT JOIN tmp USING (collection)
WHERE tmp.collection IS NULL;
INSERT INTO log
SELECT CONCAT_WS(',', 'Изменение', collection, main.category, tmp.category, main.exclusion, tmp.exclusion)
FROM main
JOIN tmp USING (collection);
- Заменяем старую таблицу на актуальную:
RENAME TABLE main TO temp;
RENAME TABLE tmp TO main;
DROP TABLE temp;
И, собственно, всё...
Питон обеспечивает руление этим процессом - передаёт запросы (на этапе 1 - и данные), отслеживает выполнение и регистрирует ошибки/предупреждения, при ошибках обрывает процесс и зовёт оператора.

