2010-10-19 28 views
9

Tôi hiện đang tìm cách tự động hóa quy trình xây dựng phần mềm bao gồm lược đồ cơ sở dữ liệu được định nghĩa trong MySQL Workbench.Xây dựng Tự động hóa & Bàn làm việc MySQL Scripting: Forward Engineer SQL CREATE SCRIPT

Sử dụng khả năng tạo tập lệnh của Bàn làm việc, tôi muốn mở tài liệu Workbench và xuất lược đồ của nó dưới dạng tập lệnh SQL CREATE.

Điều tôi muốn biết là có chức năng xuất toàn bộ lược đồ trong một bước dưới dạng Tệp của Workbench | Xuất | Kỹ sư chuyển tiếp SQL CREATE Script, tự động xử lý bất kỳ sự phụ thuộc nào giữa các bảng.

Tôi đã tìm thấy một số ứng cử viên trong module DbMySQL rằng có thể làm điều đó (generateSQL(GrtNamedObject, dict, string)makeSQLExportScript(GrtNamedObject, dict, dict, dict)), tuy nhiên tôi đang bối rối về các thông số họ mong đợi – người đầu tiên có thể là đối tượng schema, nhưng những gì là các đối số khác?

Bất cứ ai có thể cho tôi biết nếu giả định của tôi là chính xác và/hoặc cung cấp cho tôi các ví dụ sử dụng?

Cho đến nay, tôi đã tìm ra một giải pháp thủ công (lưu ý rằng đây hiện không sắp xếp bảng theo quan hệ FK của họ):

local o = assert(io.open("/tmp/create.sql", "wb")); 
foreach_table_all(function (t) 
    o:write(DbMySQL:makeCreateScriptForObject(t) .. ";\n\n") 
end) 
o:close() 

Câu hỏi đặt ra có liên quan đến How to generate SQL Script from MySQL Workbench using Command Line?, tuy nhiên câu trả lời tìm thấy có thực sự trừu tượng và không nói gì về thực sự bằng cách sử dụng các tính năng kịch bản của MySQL Workbench.

Trả lời

3

Có vẻ như là khác linked questionanswered in Dec 2013, biếu không của madhead, dù với nhỏ trục trặc đang tầm thường, và bằng Python hơn Lua, vì vậy đây là phiên bản Python đó là làm việc cho tôi:

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

Trông khá lớn so với biến thể vòng lặp nhưng có thể mang lại một số lợi ích (chưa thử nghiệm, nhưng tôi có thể tưởng tượng Workbench có thể tìm ra thứ tự thích hợp để tạo bảng, v.v.).

Ngoài ra tôi không chắc chắn về việc liệu điều này có tồn tại hay không khi tôi đặt câu hỏi, nhưng dù sao, điều này hoạt động trên một phiên bản gần đây.

+1

Bất kỳ gợi ý nào về tùy chọn nào để sử dụng để loại trừ các bảng nhất định khỏi quá trình xuất, vì có thể trong GUI? – sebastian

+0

Xem câu hỏi của tôi. Nó sử dụng 'foreach_table_all()', và hàm gọi lại có thể kiểm tra bảng và chỉ quyết định không viết nó. Đơn giản như thế. – Archimedix

+0

Bất kỳ cách nào để bỏ định danh lược đồ trong cách tiếp cận này? – sebastian

Các vấn đề liên quan