Автоматизация сборки и MySQL Workbench Scripting: прямой инженер SQL CREATE SCRIPT - PullRequest
9 голосов
/ 19 октября 2010

В настоящее время я изучаю автоматизацию процесса сборки программного обеспечения, который включает схему базы данных, определенную в MySQL Workbench.

Используя возможности сценариев Workbench, я хотел бы открыть документ Workbench и экспортировать его схему в видеСценарий SQL CREATE.

Я хотел бы знать, есть ли функция, которая экспортирует всю схему за один шаг как Файл Workbench's File | Экспорт | Сценарий SQL CREATE прямого инженера , автоматически обрабатывающий любые зависимости между таблицами.

В модуле DbMySQL я нашел несколько кандидатов, которые может сделать это(generateSQL(GrtNamedObject, dict, string) и makeSQLExportScript(GrtNamedObject, dict, dict, dict)), однако меня смущают параметры, которые они ожидают - первым может быть объект схемы, но каковы другие аргументы?

Может кто-нибудь сказать мне, если мое предположениеправильно и / или предоставить мне примеры использования?

До сих пор я придумал ручное решение (обратите внимание, что в настоящее время это не сортирует таблицы в соответствии с их отношениями 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()

Вопрос связан с Как сгенерировать SQL Script из MySQL Workbench с помощью командной строки? , однако найденный ответ действительно абстрактный и ничего не говорит о фактическом использовании функций сценариев MySQL Workbench.

1 Ответ

3 голосов
/ 13 ноября 2014

Кажется, что другой связанный вопрос получил ответил в декабре 2013 года , любезно предоставлено madhead , хотя и с незначительными незначительными сбоями кода, и в Python, а не в Lua, так вот версия Python, которая работает для меня:

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

Выглядит довольно большим по сравнению с вариантом цикла, но может принести некоторые преимущества (не проверял, но я мог бы представить, что Workbench сможет определить правильный порядок создания таблиц и т. Д.).

Также я не уверен, существовало ли это, когда я задавал вопрос, но в любом случае это работает в последней версии.

...