Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 命令行foward engineering是否使用.mwb文件?_Mysql_Command Line_Mysqldump_Mysql Workbench_Forward Engineer - Fatal编程技术网

Mysql 命令行foward engineering是否使用.mwb文件?

Mysql 命令行foward engineering是否使用.mwb文件?,mysql,command-line,mysqldump,mysql-workbench,forward-engineer,Mysql,Command Line,Mysqldump,Mysql Workbench,Forward Engineer,我需要能够从.mwb文件中的模型执行正向工程。所有这些都来自命令行,因为我想自动化这个过程 有人能告诉我这是否可行,如果可行,如何实现吗?这是使用--help调用WB后命令行中的输出: mysql-workbench [<options>] [<model file>] Options: --force-sw-render Force Xlib rendering --force-opengl-render Force OpenGL rendering

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


有人能告诉我这是否可行,如果可行,如何实现吗?

这是使用
--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
mysql工作台[][]
选项:
--强制sw渲染强制Xlib渲染
--强制opengl渲染强制opengl渲染
--查询打开命名连接的查询选项卡
--管理打开命名实例的管理选项卡
--模型打开给定的EER模型文件
--脚本执行给定的Python或Lua脚本文件
--使用GRT shell的默认语言运行并执行给定代码
--运行python在python中执行给定的代码
--运行lua在lua中执行给定的代码
--完成时退出脚本完成时退出工作台
--帮助,-h显示命令行选项并退出
--日志级别=有效级别为:错误、警告、信息、调试1、调试2、调试3
--详细启用诊断输出
--版本显示工作台版本号并退出
我想您可以使用
--model
选项加载模型,然后创建一个脚本,该脚本将执行正向工程,并使用
--run
选项运行它,然后指示WB在完成后退出
--quit when done
选项


您可以参考WB帮助以了解有关创建脚本的更多信息。

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

# -*- 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
选项来运行它。

这个问题太老了,但我在github上找到了一个项目,它在cmd windows中的命令下面,在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

考虑编辑你的帖子,包括样本输入,样本预期输出,当前代码,当前输出。祝你好运,你好,谢尔特。输入为
.mwb
文件;输出是一个
.sql
DDL文件。当前代码:没有,因为我正在寻找方向。嗨@balteo,你能让它工作吗?我现在也面临同样的问题。你好,艾斯蒂娜。我不知道您是否使用Java,但就我而言,我现在使用不同的方法:我使用Hibernate/JPA从域模型生成数据库(请参阅:Hibernate和
Hibernate.hbm2ddl.auto
)。感谢您的回复。不幸的是,我正在使用PHP,所以我必须找到一种不同的方法来实现这一点。非常感谢Sergio。我将查看提供的示例并开始编写脚本。它在命令行中运行良好(我只需要一个虚拟X服务器来运行WB)。。。但我的观点有问题。我的一些视图使用其他视图,脚本创建顺序也考虑了依赖关系。换句话说,如果我得到两个视图vA和vB,并且vB是用类似于
从vA中选择某个字段的东西定义的,那么我可能会得到一个sql脚本,试图在视图a之前生成视图B。。。当然,这会导致一个错误:
表“vA”不存在
有什么办法来解决这个问题吗?@Balmipour,对不起,我现在不知道这个问题,无法回忆详细信息。一般来说,如果你有一个新问题,最好单独问。正确的标记可以帮助他人关注并解决问题。