【问题标题】:Build Automation & MySQL Workbench Scripting: Forward Engineer SQL CREATE SCRIPT构建自动化和 MySQL 工作台脚本:Forward Engineer SQL CREATE SCRIPT
【发布时间】:2011-04-27 10:20:37
【问题描述】:

我目前正在研究自动化软件构建过程,其中包括在 MySQL Workbench 中定义的数据库模式。

使用 Workbench 的脚本功能,我想打开一个 Workbench 文档并将其架构导出为 SQL CREATE 脚本。

我想知道的是,是否有一个函数可以一步将整个架构导出为 Workbench 的 文件 | 导出 | Forward Engineer SQL CREATE Script,自动处理表之间的任何依赖关系。

我在DbMySQL 模块中找到了一些候选者可能 这样做(generateSQL(GrtNamedObject, dict, string)makeSQLExportScript(GrtNamedObject, dict, dict, dict)),但是我对他们期望的参数感到困惑——第一个可能是模式对象,但其他参数是什么?

谁能告诉我我的假设是否正确和/或提供使用示例?

到目前为止,我已经提出了一个手动解决方案(请注意,目前这不会根据它们的 FK 关系对表格进行排序):

local o = assert(io.open("/tmp/create.sql", "wb"));
foreach_table_all(function (t)
    o:write(DbMySQL:makeCreateScriptForObject(t) .. ";\n\n")
end)
o:close()

这个问题与How to generate SQL Script from MySQL Workbench using Command Line?有关,但是那里找到的答案非常抽象,并没有说明实际使用MySQL Workbench的脚本功能。

【问题讨论】:

    标签: scripting lua build-automation mysql-workbench


    【解决方案1】:

    似乎其他linked question 得到了answered in Dec 2013,由madhead 提供,尽管有一些细微的代码故障,并且使用的是Python 而不是Lua,所以这里的Python 版本适合我:

    # -*- coding: utf-8 -*-
    # MySQL Workbench Python script
    # <description>
    # Written in MySQL Workbench 6.0.8
    
    import os
    import grt
    from grt.modules import DbMySQLFE
    
    c = grt.root.wb.doc.physicalModels[0].catalog
    DbMySQLFE.generateSQLCreateStatements(c, c.version, {
        'GenerateDrops' : 1,
        'GenerateSchemaDrops' : 1,
        'OmitSchemata' : 1,
        'GenerateUse' : 1
    })
    DbMySQLFE.generateSQLCreateStatements(c, c.version, {})
    DbMySQLFE.createScriptForCatalogObjects(os.path.dirname(grt.root.wb.docPath) + '/ddl.sql', c, {})
    

    与循环变体相比,看起来相当大,但可能带来一些好处(尚未测试,但我可以想象 Workbench 能够找出创建表等的正确顺序)。

    当我问这个问题时,我也不确定这是否存在,但无论如何,这适用于最近的版本。

    【讨论】:

    • 关于使用什么选项从导出中排除某些表的任何提示,就像在 GUI 中可能的那样?
    • 看我的问题。它使用foreach_table_all(),回调函数可以检查表并决定不写它。就这么简单。
    • 有什么方法可以在这种方法中删除模式标识符?
    • 还没有看过,所以我建议您参考文档/帮助。但我猜,在大多数情况下,你可能只是破解并使用字符串替换。
    • 我找不到任何有关这些选项的文档,但看起来它们主要是经过处理的 here。好像有TableFilterListOmitSchemas
    猜你喜欢
    • 2013-03-03
    • 2017-06-08
    • 2017-07-23
    • 2014-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-09
    • 2019-03-22
    相关资源
    最近更新 更多