自動化とMySQLワークベンチスクリプトのビルド:フォワードエンジニアSQL Create Script
-
09-10-2019 - |
質問
現在、MySQLワークベンチで定義されているデータベーススキーマを含むソフトウェアビルドプロセスの自動化を検討しています。
Workbenchのスクリプト機能を使用して、Workbenchドキュメントを開き、SQL Createスクリプトとしてスキーマをエクスポートしたいと思います。
私が知りたいのは、ワークベンチとして1つのステップでスキーマ全体をエクスポートする関数があるかどうかです ファイル | 書き出す | Forward Engineer 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()
質問はに関連しています コマンドラインを使用してMySQLワークベンチからSQLスクリプトを生成する方法は?, しかし、そこにある答えは本当に抽象的であり、MySQLワークベンチのスクリプト機能を実際に使用することについては何も語っていません。
解決
他のようです リンクされた質問 手に入れた 2013年12月に回答しました, 、礼儀 マッドヘッド, 、マイナーな些細なコードのグリッチがあり、ルアではなくPythonでは、ここでは私のために働いている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, {})
ループバリアントに比べてかなり大きく見えますが そうかもしれない いくつかの利点をもたらします(テストしていませんが、ワークベンチがテーブルなどを作成するための適切な順序を把握できると想像できます。)。
また、質問をしていたときにこれが存在したかどうかはわかりませんが、とにかく、これは最近のバージョンで機能します。