Question

Je suis actuellement à la recherche en automatisation d'un processus de construction logicielle qui comprend un schéma de base de données défini dans MySQL Workbench.

Utilisation des fonctions de script de Workbench, je voudrais ouvrir un document Workbench et exporter son schéma comme un script SQL CREATE.

Ce que je voudrais savoir est s'il y a une fonction qui exporte le schéma entier en une seule étape de Workbench comme Fichier | Exporter | Ingénieur Forward SQL Script CREER , le traitement automatique des dépendances entre les tables.

J'ai trouvé des candidats dans le module DbMySQL que peut le faire (generateSQL(GrtNamedObject, dict, string) et makeSQLExportScript(GrtNamedObject, dict, dict, dict)), mais je suis confus au sujet des paramètres qu'ils attendent - le premier pourrait être l'objet de schéma, mais quels sont les autres arguments?

Quelqu'un pourrait-il me dire si mon hypothèse est correcte et / ou me donner des exemples d'utilisation?

Jusqu'à présent, je suis venu avec une solution manuelle (notez que cela ne actuellement pas classez les tables en fonction de leurs relations 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 question est liée à Comment générer un script SQL de MySQL Workbench à l'aide de ligne de commande? , mais la réponse trouvée il y a vraiment abstraite et ne dit rien sur le script en utilisant effectivement les caractéristiques de MySQL Workbench.

Était-ce utile?

La solution

Il semble que d'autres question liée obtenu répondu en décembre 2013 , avec la permission de madhead , mais avec des pépins mineurs de code trivial, et en Python plutôt que Lua, alors voici la version Python qui fonctionne pour moi:

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

On dirait plutôt grand par rapport à la variante de la boucle, mais peut apporter certains avantages (ont pas testé, mais je pourrais imaginer Workbench être en mesure de déterminer l'ordre approprié pour créer des tableaux, etc.).

Aussi je ne suis pas sûr de savoir si cela a existé quand je pose la question, mais de toute façon, cela fonctionne sur une version récente.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top