0

我们正在自动化在我们的数据库上创建/修改表的过程。我们将 ddls 保存在 github repo 中。如果定义已更改,我们的目标是删除并再次创建表。否则,没有变化。

假设我们有一个名为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。标准 diff 实用程序不能很好地比较 2 个 sql 文件。如果字段的顺序不同但整体 ddl 可能相同,它将创建差异。

4

2 回答 2

0

考虑通过 SQL 解析器运行这两个版本(例如,https ://pypi.org/project/sqlparse/ - 不暗示背书,可能有其他替代方案)并比较两个解析树的元素。

于 2020-02-19T18:34:38.893 回答
0

由于您正在寻找 Python API,您可能需要考虑使用 GitPython

对于比较(您的步骤 2),提交文件并让 git 确定是否有任何更改。git diff编辑:考虑到您对空白的评论,添加到使用 Git 进行比较( ),请参阅此答案以获得指导。

于 2020-02-19T18:28:15.323 回答