SQL - Сравнение sql ddl программно - PullRequest
0 голосов
/ 19 февраля 2020

Мы автоматизируем процесс создания / изменения таблиц в нашей базе данных. Мы храним наши ddls в репозитории github. Наша цель - удалить и снова создать таблицу, если определение изменилось. В противном случае без изменений.

Допустим, у нас есть таблица с именем table1

Шаги:

1. Query database to get ddl for table1.
2. Get ddl from github repo, check if there is any difference between github & ddl from database server.
3. If there is a difference, drop and create again
4. Else, no change.

Для сравнения сравнение строк очень наивно (изменение в пробелы не означают изменения в схеме).

Есть ли API для сравнения? Я специально ищу python API. Стандартная утилита сравнения не справляется со сравнением файлов размером 2 sql. Он создаст diff, если порядок полей различен, но общий ddl может быть одинаковым.

Ответы [ 2 ]

0 голосов
/ 19 февраля 2020

Рассмотрите возможность запуска обеих версий через синтаксический анализатор SQL (например, https://pypi.org/project/sqlparse/ - не подразумевается одобрение, возможны другие альтернативы) и сравнение элементов двух деревьев разбора.

0 голосов
/ 19 февраля 2020

Поскольку вы ищете Python API, вы можете использовать что-то вроде GitPython

. Для сравнения (ваш шаг 2) зафиксируйте файл и позвольте git определить, были ли какие-либо изменения. РЕДАКТИРОВАТЬ: добавив к использованию Git для сравнения (git diff), учитывая ваш комментарий к пробелу, см. ответ для руководства.

...