构建自动化& MySQL Workbench Scripting:正向工程师SQL CREATE SCRIPT

时间:2010-10-19 11:07:33

标签: scripting lua build-automation mysql-workbench

我目前正在研究自动化软件构建过程,其中包括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的脚本功能。

1 个答案:

答案 0 :(得分:3)

似乎其他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能够找出创建表格的正确顺序等)

此外,当我提出问题时,我不确定这是否存在,但无论如何,这适用于最新版本。