10

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

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

我想知道的是是否有一个函数可以一步将整个模式导出为 Workbench 的File | 出口| 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()

该问题与如何使用命令行从 MySQL Workbench 生成 SQL 脚本有关?,但是发现那里的答案真的很抽象,并没有说明实际使用 MySQL Workbench 的脚本功能。

4

1 回答 1

3

似乎其他链接的问题在 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-13T17:21:06.493 回答