2010-10-19 8 views
9

Actualmente estoy buscando la automatización de un proceso de compilación de software que incluya un esquema de base de datos definido en MySQL Workbench.Automatización de compilación y MySQL Workbench Scripting: reenviar SQL SQL CREATE SCRIPT

Utilizando las capacidades de scripting de Workbench, me gustaría abrir un documento de Workbench y exportar su esquema como un script SQL CREATE.

Lo que me gustaría saber es si hay una función que exporta el esquema completo en un solo paso como de archivos de Workbench | Exportación | Forward Engineer SQL CREATE Script, manejando automáticamente cualquier dependencia entre tablas.

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

¿Alguien podría decirme si mi suposición es correcta y/o darme ejemplos de uso?

Hasta ahora, he llegado a una solución manual (tenga en cuenta que este momento no ordena las tablas en función de 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 How to generate SQL Script from MySQL Workbench using Command Line?, sin embargo la respuesta encontrado que es realmente abstracto y no dice nada sobre el uso de las características de scripting de MySQL Workbench.

Respuesta

3

Parece que otra linked question tiene answered in Dec 2013, cortesía de madhead, aunque con fallos de código triviales menores, 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 podría imaginar que Workbench sea capaz de encontrar el orden correcto para crear tablas, etc.).

Además, no estoy seguro de si esto ha existido cuando hice la pregunta, pero de todos modos, esto funciona en una versión reciente.

+1

¿Alguna pista sobre qué opción usar para excluir ciertas tablas de la exportación, como es posible en la GUI? – sebastian

+0

Ver mi pregunta. Utiliza 'foreach_table_all()', y la función de devolución de llamada puede verificar la tabla y decidir no escribirla. Simple como eso. – Archimedix

+0

¿Hay alguna manera de colocar el identificador de esquema en este enfoque? – sebastian

Cuestiones relacionadas