Вопрос

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

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

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

Я нашел кандидатов в 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 от Workbench MySQL с помощью командной строки?, Однако нашел ответ действительно абстрактный и ничего не говорит о фактическом использовании функций сценариев MySQL Workbench.

Это было полезно?

Решение

Кажется, другой связанный вопрос есть ответил в декабре 2013 года, вежливость сумасшедший, хотя и с незначительным тривиальным кодексом глюков, а в 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, способный понять правильный порядок для создания таблиц и т. Д.).

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top