SQL - 以编程方式比较 sql ddl
Posted
技术标签:
【中文标题】SQL - 以编程方式比较 sql ddl【英文标题】:SQL - Comparing sql ddl programmatically 【发布时间】:2020-02-19 17:41:00 【问题描述】:我们正在自动化在我们的数据库上创建/修改表的过程。我们将 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 可能相同,它将创建差异。
【问题讨论】:
【参考方案1】:考虑通过 SQL 解析器运行这两个版本(例如,https://pypi.org/project/sqlparse/ -- 不暗示背书,可能有其他替代方案)并比较两个解析树的元素。
【讨论】:
【参考方案2】:由于您正在寻找 Python API,您可能需要考虑使用类似 GitPython
为了比较(您的第 2 步),提交文件并让 git 确定是否有任何更改。
编辑:添加到使用 Git 进行比较 (git diff
) 给出您对空白的评论,请参阅此answer 以获得指导。
【讨论】:
如果有空格等也无济于事 @user1768610 我已经更新了我的答案,以解决您对空间的担忧。这里有一个类似的问题:***.com/q/33159394/3854195以上是关于SQL - 以编程方式比较 sql ddl的主要内容,如果未能解决你的问题,请参考以下文章