Build Automation & MySQL Workbench Scripting: Enderver Engineer SQL Создать скрипт
-
09-10-2019 - |
Вопрос
В настоящее время я ищу автоматизацию процесса сборки программного обеспечения, который включает в себя схему базы данных, определенную в 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, способный понять правильный порядок для создания таблиц и т. Д.).
Также я не уверен в том, существует ли это, когда я задал вопрос, но в любом случае, это работает на недавней версии.