Pregunta

Actualmente estoy buscando en la automatización de un proceso de construcción de software que incluye un esquema de base de datos definida en MySQL Workbench.

El uso de las capacidades de scripting de banco de trabajo, me gustaría abrir un documento Workbench y exportar su esquema como SQL CREATE guión.

Lo que me gustaría saber es si hay una función que las exportaciones de todo el esquema en una etapa como banco de trabajo de Archivo | Exportar | Reenviar Ingeniero SQL crean secuencias de comandos , la manipulación automáticamente las dependencias entre las tablas.

He encontrado algunos candidatos en el módulo DbMySQL que fuerza hacer eso (generateSQL(GrtNamedObject, dict, string) y makeSQLExportScript(GrtNamedObject, dict, dict, dict)), sin embargo estoy confundido acerca de los parámetros que esperan - la primera de ellas podría ser el objeto de esquema, pero ¿cuáles son los otros argumentos?

¿Podría alguien decirme si mi suposición es correcta y / o me proporcione ejemplos de uso?

Hasta ahora, he llegado a una solución manual (Nótese que esto actualmente no ordenar los cuadros de acuerdo a sus relaciones 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()

La pregunta está relacionada con Cómo generar secuencias de comandos SQL de MySQL Workbench usando la línea de comandos? , sin embargo la respuesta encuentra allí es realmente abstracta y dice nada acerca de la utilización de dicho scripting características de MySQL Workbench.

¿Fue útil?

Solución

Parece que otra pregunta contestado en diciembre de 2013 , cortesía de madhead , aunque con menores problemas técnicos de código triviales, y en Python en lugar de Lua, así que aquí la versión de Python que está trabajando para mí:

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

Parece bastante grande en comparación con la variante de bucle pero podría traer algunos beneficios (no se han probado, pero me podría imaginar Workbench ser capaz de averiguar el orden correcto para crear tablas, etc.).

También estoy seguro de si esto ha existido cuando yo estaba haciendo la pregunta, pero de todos modos, esto funciona en una versión reciente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top