我目前正在研究自动化软件构建过程,其中包括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的脚本功能。
答案 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能够找出创建表格的正确顺序等)
此外,当我提出问题时,我不确定这是否存在,但无论如何,这适用于最新版本。