2010-10-19 17 views
9

बनाएं मैं वर्तमान में एक सॉफ्टवेयर निर्माण प्रक्रिया को स्वचालित करने में देख रहा हूं जिसमें MySQL वर्कबेंच में परिभाषित डेटाबेस स्कीमा शामिल है।ऑटोमेशन और MySQL वर्कबेंच स्क्रिप्टिंग बनाएं: फॉरवर्ड इंजीनियर एसक्यूएल एससीआरआईपीटी

वर्कबेंच की स्क्रिप्टिंग क्षमताओं का उपयोग करके, मैं वर्कबेंच दस्तावेज़ खोलना चाहता हूं और 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() 

सवाल How to generate SQL Script from MySQL Workbench using Command Line? से संबंधित है, लेकिन इस सवाल का जवाब पाया कि वास्तव में अमूर्त है और वास्तव में MySQL वर्कबेंच की स्क्रिप्टिंग सुविधाओं का उपयोग करने के बारे में कुछ नहीं बताता है।

उत्तर

3

लगता है कि अन्य linked questionmadhead की answered in Dec 2013 मिला, शिष्टाचार, मामूली तुच्छ कोड खामियों के साथ यद्यपि, और अजगर के बजाय लुआ, इसलिए यहां अजगर संस्करण है कि मेरे लिए काम कर रहा है में:

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

बल्कि बड़ा लग रहा है लूप संस्करण की तुलना में कुछ लाभ लाएगा (परीक्षण नहीं किया गया है, लेकिन मैं कल्पना कर सकता हूं कि वर्कबेंच टेबल बनाने के लिए उचित क्रम को समझने में सक्षम है)।

इसके अलावा मुझे इस बारे में अनिश्चितता है कि जब मैं सवाल पूछ रहा था, तो यह अस्तित्व में है, लेकिन फिर भी, यह हाल के संस्करण पर काम करता है।

+1

निर्यात से कुछ तालिकाओं को छोड़कर उपयोग करने के लिए किस विकल्प का उपयोग करने के लिए कोई संकेत है, क्योंकि यह जीयूआई में संभव है? – sebastian

+0

मेरा प्रश्न देखें। यह 'foreach_table_all()' का उपयोग करता है, और कॉलबैक फ़ंक्शन तालिका की जांच कर सकता है और बस इसे लिखने का निर्णय नहीं ले सकता है। इतना ही आसान। – Archimedix

+0

इस दृष्टिकोण में स्कीमा पहचानकर्ता को छोड़ने का कोई तरीका? – sebastian