Domanda

Attualmente sto esaminando automatizzando un processo di build software che include uno schema di database definito in MySQL Workbench.

Utilizzando le funzionalità di scripting di Workbench, mi piacerebbe aprire un documento Workbench ed esportare lo schema come SQL CREATE script.

Quello che mi piacerebbe sapere è se c'è una funzione che le esportazioni l'intero schema in un passo come Workbench di File | Esporta | Inoltra Ingegnere SQL CREATE script , la manipolazione automaticamente tutte le dipendenze tra le tabelle.

ho trovato alcuni candidati nel modulo DbMySQL che potrebbe farlo (generateSQL(GrtNamedObject, dict, string) e makeSQLExportScript(GrtNamedObject, dict, dict, dict)), ma sono confuso circa i parametri che si aspettano - il primo potrebbe essere l'oggetto dello schema, ma quali sono gli altri argomenti?

Qualcuno potrebbe dirmi se la mia ipotesi è corretta e / o mi forniscono esempi di utilizzo?

Finora, mi è venuta in mente una soluzione manuale (nota che questo momento non ordina le tabelle in base alle loro relazioni 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 questione è legata alla Come genera script SQL da MySQL Workbench utilizzando riga di comando? , tuttavia la risposta trovata c'è davvero astratto e dice nulla sulla realtà usando scripting caratteristiche di MySQL Workbench.

È stato utile?

Soluzione

Sembra che altri legata domanda risposto nel dicembre 2013 , per gentile concessione di madhead , anche se con lievi difetti di codice banali, e in Python, piuttosto che Lua, ecco la versione di Python che sta lavorando per me:

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

Sembra piuttosto grande rispetto alla variante di ciclo, ma potrebbe portare alcuni benefici (hanno non testato, ma potrebbe immaginare Workbench di essere in grado di capire il giusto ordine per creare tabelle, ecc.).

Anche io sono sicuri se questo è esistito quando stavo facendo la domanda, ma in ogni caso, questo funziona su una versione recente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top