【问题标题】:Command line foward engineering using a .mwb file?使用 .mwb 文件的命令行工程?
【发布时间】:2012-03-04 15:50:51
【问题描述】:

我需要能够从 .mwb 文件中的模型执行正向工程。所有这些都来自命令行,因为我想自动化这个过程。

谁能告诉我这是否可行,如果可以,如何?

【问题讨论】:

  • 考虑编辑您的帖子以包括示例输入、示例预期输出、当前代码、当前输出。祝你好运。
  • 你好,谢尔特。输入是一个.mwb 文件;输出是一个.sql DDL 文件。当前代码:没有,因为我正在寻找方向。
  • 嗨@balteo,你曾经能够让它工作吗?我目前面临同样的问题。
  • 你好艾斯蒂娜。我不知道您是否使用 Java,但就我而言,我现在使用不同的方法:我使用 Hiberante/JPA 从域模型生成数据库(请参阅:Hibernate 和 hibernate.hbm2ddl.auto)。
  • 感谢您的回复。不幸的是,我使用的是 PHP,所以我必须找到一种不同的方法来实现这一点。

标签: mysql command-line mysqldump mysql-workbench forward-engineer


【解决方案1】:

这是使用 --help 调用 WB 后命令行中的输出:

mysql-workbench [<options>] [<model file>]
Options:
  --force-sw-render      Force Xlib rendering
  --force-opengl-render  Force OpenGL rendering
  --query <connection>   Open a query tab to the named connection
  --admin <instance>     Open a administration tab to the named instance
  --model <model file>   Open the given EER model file
  --script <script file> Execute the given Python or Lua script file
  --run <script>         Execute the given code in default language for GRT shell
  --run-python <script>  Execute the given code in Python
  --run-lua <script>     Execute the given code in Lua
  --quit-when-done       Quit Workbench when the script is done
  --help, -h             Show command line options and exit
  --log-level=<level>    Valid levels are: error, warning, info, debug1, debug2, debug3
  --verbose              Enable diagnostics output
  --version              Show Workbench version number and exit

我猜你可以使用--model 选项加载你的模型,然后创建一个脚本来执行正向工程并使用--run 选项运行它,然后指示WB 在使用--quit-when-done 完成后退出选项。

您可以咨询 WB 帮助以了解有关创建脚本的更多信息以及this guide

【讨论】:

  • 非常感谢塞尔吉奥。我将查看提供的示例并开始编写我的脚本。
【解决方案2】:

您实际上可以使用 Python(或 Lua)脚本自动执行此任务 - MySQL Workbench 在Scripting 菜单下已经有一个解释器。创建一个新脚本并使用存根:

# -*- coding: utf-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-script 选项运行它。

【讨论】:

  • 从命令行运行良好(我只需要一个虚拟 X-server 来运行 WB)... 但是我的观点有问题。我的一些视图使用其他视图,并且脚本创建排序确实注意考虑到依赖关系。换句话说,如果我得到两个视图 vA 和 vB,并且 vB 是用 select somefield FROM vA 之类的东西定义的,我最终可能会得到一个 sql 脚本,试图在视图 A 之前生成视图 B ...当然,这会导致一个错误:Table 'vA' doesn't exist 有什么办法解决这个问题吗?
  • @Balmipour,对不起,我现在不在这个问题上,不记得细节了。通常,如果您有新问题,最好单独提出。适当的标记可以帮助其他人关注并解决它。
【解决方案3】:

这个问题太老了,但是我在 github 上找到了一个项目,在 cmd windows 中的命令下方,以及here github 存储库和更多 linux sh 文件版本。

窗户

@echo off
REM generate sql from mwb
REM usage: mwb2sql.bat {.mwb file} {output file}

SET WORKBENCH="C:\Program Files (x86)\MySQL\MySQL Workbench 6.0 CE\MySQLWorkbench.exe"
SET OUTPUT=%~f2
%WORKBENCH% ^
  -open %~f1 ^
  -run-python "import os;import grt;from grt.modules import DbMySQLFE as fe;c = grt.root.wb.doc.physicalModels[0].catalog;fe.generateSQLCreateStatements(c, c.version, {});fe.createScriptForCatalogObjects(os.getenv('OUTPUT'), c, {})" ^
  -quit-when-done

【讨论】:

  • 从版本 7 和 8 开始,我们必须为命令行参数指定双“-”:C:\Program Files\MySQL\MySQL Workbench 8.0 CE\MySQLWorkbench.exe --open "D:\ MyFolder\MyFile.mwb" --run-python "import grt; from grt.modules import DbMySQLFE as fe; c = grt.root.wb.doc.physicalModels[0].catalog; fe.generateSQLCreateStatements(c, c.version , {}); fe.createScriptForCatalogObjects(r'C:\Windows\Temp\tempSqlFile.sql', c, {});" --完成后退出
猜你喜欢
  • 1970-01-01
  • 2012-05-18
  • 2019-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多