构建自动化与MySQL Workbench脚本编写:正向生成SQL CREATE脚本

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

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

我想知道的是,是否有一个函数可以将整个架构作为Workbench的_File_ | Export | _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的脚本功能的说明。

原文链接 https://stackoverflow.com/questions/3967692

点赞
stackoverflow用户419404
stackoverflow用户419404

似乎其他相关问题在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, {})

相较于循环变量,看起来有些庞大,但_可能_会带来一些好处(尚未测试,但我可以想象Workbench能够找出正确的表格创建顺序等)。

另外,我不确定在我提出问题时是否存在这个版本,但不管怎样,这在最近的一个版本上运行良好。

2014-11-13 17:21:06