Arc*_*dix 10 build-automation scripting lua mysql-workbench
我目前正在研究自动化软件构建过程,其中包括MySQL Workbench中定义的数据库模式.
使用Workbench的脚本功能,我想打开一个Workbench文档并将其模式导出为SQL CREATE脚本.
我想知道的是,如果有一个出口在整个架构中的一个步骤作为工作台的功能文件 | 出口 | 正向工程SQL CREATE脚本,自动处理表之间的任何依赖关系.
我在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()
Run Code Online (Sandbox Code Playgroud)
问题与如何使用命令行从MySQL Workbench生成SQL脚本有关?但是,答案发现这里确实是抽象的,并且没有说明实际使用MySQL Workbench的脚本功能.
似乎其他链接的问题在 2013 年 12 月得到了回答,由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, {})
Run Code Online (Sandbox Code Playgroud)
与循环变体相比,看起来相当大,但可能会带来一些好处(尚未测试,但我可以想象 Workbench 能够找出创建表等的正确顺序)。
我也不确定当我问这个问题时这是否存在,但无论如何,这适用于最新版本。