6

Necesito poder para realizar una ingeniería de avance desde un modelo ubicado en un archivo .mwb. Todo esto desde la línea de comandos ya que me gustaría automatizar el proceso.¿Avanzó la línea de comandos usando un archivo .mwb?

¿Puede alguien decirme si esto es posible y, en caso afirmativo, cómo?

+0

Considere la edición de su puesto para incluir entrada de la muestra, la salida esperada de la muestra, código actual, la salida de corriente. Buena suerte. – shellter

+0

Hola Shellter. La entrada es un archivo '.mwb'; el resultado es un archivo DDL '.sql'. Código actual: ninguno ya que estoy buscando direcciones. – balteo

+0

Hola @balteo, ¿alguna vez lograste que esto funcionara? Actualmente estoy enfrentando el mismo problema. – Aistina

Respuesta

5

Ésta es la salida de la línea de comandos una vez que se llama a WB con --help:

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 

supongo que se puede cargar el modelo mediante la opción --model y luego crear un script que va a realizar la ingeniería de adelante y la marcha usando la opción --run y luego instruir a WB para que salga una vez que termine con la opción --quit-when-done.

Puede consultar la ayuda de WB para obtener más información sobre la creación de scripts, así como this guide.

+0

Muchas gracias Sergio. Echaré un vistazo a las muestras proporcionadas y comenzaré a escribir mi script. – balteo

3

Puede automatizar esta tarea con el script Python (o Lua) - MySQL Workbench ya tiene un intérprete en el menú Scripting. Crear un nuevo guión y utilizar el talón:

# -*- 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, {}) 

No actully ejecuta desde la línea de comandos, pero que creo que se puede ejecutar con --run-script opción.

+0

Funciona bien desde la línea de comandos (solo necesitaba un servidor X ficticio para ejecutar WB) ... * pero * Tengo un problema con mis vistas. Algunas de mis vistas usan otras vistas, y las creaciones de script-ordering no tienen en cuenta las dependencias de la cuenta. En otras palabras, si obtengo dos vistas vA y vB, y vB se define con algo como 'select somefield FROM vA', puedo terminar con un script sql tratando de generar la vista B antes de la vista A ... que por supuesto, resulta en un error: 'La tabla 'vA' no existe' ¿Alguna idea para arreglar esto? – Balmipour

+0

@Balmipour, lo siento, ahora estoy fuera del circuito de esta pregunta, no recuerdo los detalles. En general, si tiene una nueva pregunta, es mejor preguntarla por separado. El etiquetado adecuado puede ayudar a otros a prestarle atención y resolverlo. – madhead

2

Esta pregunta es demasiado antigua, pero encontré un proyecto en github que hace esto, debajo de los comandos en ventanas de cmd, y here el repositorio de github y más versión de archivo de linux sh.

de Windows

@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 
Cuestiones relacionadas