WebMoney: WMZ Z294115950220 WMR R409981405661 WME E134003968233 |
Visa 4274 3200 2453 6495 |
MySQL Workbench обеспечивает расширение и систему скриптов, которая
позволяет разработчику расширить возможности MySQL Workbench.
В то время как ядро MySQL Workbench написано, используя C++, возможно
использовать эту базовую функциональность, используя язык Python.
MySQL Workbench также обеспечивает доступ к кросс-платформенной библиотеке
GUI, MForms, которая позволяет создание расширений, которые показывают
графический интерфейс пользователя. Система позволяет следующие возможности: Автоматизируйте общие задачи. Generic RunTime (GRT) является внутренней системой, используемой MySQL
Workbench, чтобы хранить данные о документе. Это также механизм, которым
Workbench может взаимодействовать с модулями и плагинами. Данные модели
Workbench, такие как диаграммы, схемы и таблицы, хранятся в иерархии
объектов, к которым может получить доступ любой плагин.
Информация представляется, используя стандартные типы данных: целые числа,
числа double, строки, словари, списки и объекты. К GRT можно получить доступ, используя язык Python.
Осведомленность требуется относительно того, как типы данных GRT отображаются
в Python. Например, целое число GRT и типы данных String рассматриваются как
соответствующие типы данных Python. Списки и словари сохраняются в их
внутреннем представлении, но можно обычно рассматривать как списки и словари
Python и получать доступ обычным способом. Объекты содержат поля данных и
методы, но GRT признает только объекты от
предзарегистрированной иерархии классов. Возможно полностью исследовать классы в GRT с использованием
Workbench Scripting Shell. Точки в именах классов изменяются на подчеркивания
в версиях для Python. Например, Как упомянуто ранее, данные о документе MySQL Workbench
хранятся в иерархии объектов. Эта иерархия известна как GRT, к ней можно
получить доступ с использованием Python или C++. Будьте осторожны, изменяя
дерево GRT, поскольку ошибки могут привести к повреждению документа.
Резервные копии должны быть сделаны прежде, чем управлять деревом.
Доступ только для чтения к дереву это самый безопасный подход и
достаточен в большинстве случаев. Таблица C.1. Главные узлы в дереве объекта приложения В GRT модули это библиотеки, содержащие список функций, которые
экспортируются для использования кодом в других модулях, скриптах или самим
Workbench. Модули могут быть написаны на C++ или Python,
но типы данных, используемые для аргументов и возвращаемого значения, должны
быть типами GRT. Модули GRT подобны модулям Python, но импортируются из встроенного
модуля Чтобы экспортировать функции как модуль из кода Python,
выполните следующие шаги: Расположение файлов модуля по умолчанию: Таблица C.2. Пользовательское расположение файла модуля по умолчанию
У имени исходного файла должно быть расширение
Функции, которые будут экспортироваться, требуют, чтобы их подпись
была объявлена. Это достигается, используя экспортного декоратора в ранее
созданном объекте ModuleInfo: Для запроса Эти типы определяются в модуле Следующий фрагмент кода иллюстрирует объявление модуля, который
экспортирует единственную функцию:
Плагины это специальные модули, которые выставляются пользователю через
Workbench GUI. Это, как правило, делается, используя главное меню или
контекстно-зависимое меню. Большая часть функциональности MySQL Workbench
осуществляется, используя плагины, например, таблица, представление и обычные
редакторы это родные плагины C++, как и мастера. Средство Administrator в
MySQL Workbench осуществляется полностью как плагин в Python. Плагин может быть простой функцией, которая выполняет некоторое действие
на входе и заканчивается без дальнейшего взаимодействия с пользователем.
Примеры этого включают автоподготовку диаграммы или внесение пакетных
изменений в объекты. Чтобы создать простой плагин, функция должна быть
расположена в модуле и объявлена как плагин, используя декоратор
У плагинов может быть неопределенное время выполнения, как тогда, когда их
ведет пользователь через графический интерфейс пользователя. Дело обстоит так
для редакторов объектов и мастеров в MySQL Workbench. Хотя для мастера
тип плагина должен быть объявлен обычным способом, только точка входа плагина
должна быть выполнена в функции плагина, поскольку большая часть
дополнительной функциональности будет вызвана в результате
взаимодействия пользователя с GUI. Перезагрузка плагина требует, чтобы MySQL Workbench был перезапущен. Импортированные файлы плагинов (и их собранные коллеги) хранятся здесь:
Таблица C.3. Пользовательское расположение файла плагина Объявите плагин, используя этот синтаксис: Эти параметры определяются следующим образом: plugin_name:
уникальное имя для плагина. Это может содержать только алфавитно-цифровые
символы, точки и подчеркивания. pluginMenu:
Дополнительное название подменю в меню Plugins, где плагин должен появиться.
Например, ,
,
. Это эквивалентно добавлению
MySQL Workbench осуществляется с бэкендом ядра C++
и родным фронтендом для каждой поддерживаемой платформы.
В настоящее время фронтенд осуществляется с Windows Forms на
Microsoft Windows, GTK+ в Linux и с Cocoa в OS X/macOS.
Этот подход разрешает приложению иметь родной стиль, уменьшая объем работы,
требуемый, чтобы вести проект. Однако функциональность GUI, требуемая MySQL
Workbench, может быть поддержана подмножеством графических операций.
Они осуществляются в кросс-платформенной библиотеке GUI MForms.
Это уменьшает усилия по развитию, потому что разработчики плагинов могут
использовать MForms вместо того, чтобы писать фронтенд для каждой
поддерживаемой платформы. Это также помогает последовательности операции
через все платформы. MForms написан на C++, но обеспечивает интерфейс Python.
Чтобы использовать его, код Python должен импортировать модуль
Контейнеры MForms Учитывая проблемы использования системы абсолютной координаты с различными
платформами, MForms использует контейнеры, которые выполняют автоматическое
выравнивание. Основные контейнеры, которые обеспечивает MForms, включают:
Form:
Окно верхнего уровня, которое может содержать единственный контроль, обычно
другой контейнер. Окно будет измерено автоматически, чтобы соответствовать
его содержанию, но может также быть измерено статически. Workbench Scripting Shell обеспечивает средство для ввода и выполнения
скриптов Python.
С помощью оболочки скриптов MySQL Workbench может поддержать новое поведение
и источники данных, используя код, написанный на Python. Оболочка может также
использоваться, чтобы исследовать текущие средства Workbench
Generic RunTime (GRT). Оболочка скриптов не только полезна для расширения MySQL Workbench.
Можно использовать файл скрипта из командной строки оболочки скриптов, чтобы
выполнить повторяющиеся задачи программно.
У MySQL также есть продукт под названием MySQL Utilities,
который отличается от Workbench Scripting Shell. Чтобы открыть Workbench Scripting Shell, выберите
Control
+ F3 в Windows и Linux или
Command +
F3 в macOS
или нажимая кнопку оболочки выше навигатора диаграмм EER.
Workbench Scripting Shell тогда откроется в новом диалоге. Рис. C.1. Workbench Scripting Shell Workbench Scripting Shell прежде всего используется для управления
скриптами Python или непосредственно печати команд в Python.
Однако можно также использовать его, чтобы получить доступ к функциям
Workbench Scripting Shell Scripting Library, глобальным функциям и объектам.
Чтобы видеть доступные команды, напечатайте
Вкладка Snippets это временная память для
хранения фрагментов кода, который облегчает повторное использование и
выполнение кода в MySQL Workbench. Рис. C.2. Workbench Scripting Shell: вкладка Snippets Открытые вкладки файла скрипта справа от вкладки
Snippets. Вкладки скрипта маркированы именем
файла скрипта или В то время как отдельные команды могут быть введены в оболочку, также
возможно управлять более длинным скриптом, сохраненным во внешнем файле,
используя меню Также возможно управлять файлами скрипта непосредственно от оболочки.
Для получения дополнительной информации о файлах скрипта напечатайте
? run в Workbench Scripting
Shell. Следующее сообщение будет показано: В Workbench Scripting Shell есть пять вкладок наверху
панели с левой стороны: Files,
Globals, Classes, and
Modules и
Notifications. Исключение брошено, пытаясь использовать
Workbench Scripting Shell показывает вкладки
Files, Globals,
Classes, Modules
и Notifications
в дополнение к главной вкладке Shell. Вкладка Files перечисляет папки и файлы для
определенных пользователями файлов скрипта. Категории файлового браузера:
User Scripts, User
Modules и User Libraries. Рис. C.3. The Workbench Scripting Shell: вкладка Files По умолчанию скрипты сохранены в каталоге
Таблица C.4. Местоположение скриптов по умолчанию Наверху окна список, который используется, чтобы выбрать отправную точку
или корень дерева GRT Globals, показанного ниже него. По умолчанию эта
отправная точка корень дерева, то есть '/'. Можно расширить или свернуть
дерево GRT Globals, оно является структурой, в которой MySQL Workbench
хранит данные о документе. Нажатие на любой пункт приводит к его имени и
значению, показываемой в панели ниже дерева. Рис. C.4. Workbench Scripting Shell: вкладка Globals Рис. C.5. Workbench Scripting Shell: вкладка Classes Когда выбрана вкладка Classes,
список показывает следующие пункты: Group by Name:
Группировка именем объекта. Представление по умолчанию для этой вкладки:
Group By Name. Это представление показывает все
различные объекты в алфавитном порядке. Щелкните значок
или дважды щелкните по пакету, чтобы
показать свойства структуры. Если вы переключитесь на иерархическое представление, вы будете видеть
Вкладка Modules нужна, чтобы просмотреть
установленные модули MySQL Workbench и их функции. Нажатие на модуль в
исследователе заставляет детали быть показанными в группе ниже исследователя.
Это средство полезно для исследования доступных модулей и их функций.
Это также способ проверить, были ли модули правильно установлены. Рис. C.6. Workbench Scripting Shell: вкладка Modules Вкладка Notification включает набор
классов Рис. C.7. Workbench Scripting Shell: вкладка Notifications Обучающие программы в этой секции демонстрируют, как расширить MySQL
Workbench, создав плагины. MySQL Workbench включает плагин, который производит код PHP с расширением
Чтобы начать, рассмотрите код, показанный в примере, который следует.
Этот простой плагин производит код PHP, чтобы создать подключение
MySQL, используя PHP Чтобы произвести код PHP для связи, сначала установите
плагин следующим образом: Вы могли скопировать файл непосредственно в каталог плагинов
вместо того, чтобы использовать интерфейс Install
Plugin/Module. Результатом было бы то же самое. Это действие копирует произведенный код PHP в буфер обмена
на вашей системе. Следующий пример связи определяет "sakila"
как базу данных по умолчанию в произведенном коде. Диаграммы EER полезны для визуализации сложных схем базы данных.
Они часто создаются для существующих баз данных, чтобы разъяснить их цель
или описать их. MySQL Workbench предоставляет средства для инженерного
анализа существующих баз данных и затем создания диаграммы EER автоматически.
В этом случае линии связей между внешними ключами в таблице будут
автоматически нарисованы. Это графическое представление делает отношения
между таблицаами намного легче понять. Однако более старый механизм
хранения MyISAM не включает поддержку внешних ключей. Это означает, что
таблицы MyISAM, которые перепроектированы, автоматически не покажут
линии связей между таблицами, делая базу данных тяжелее в понимании.
Плагин, созданный в этой обучающей программе, обходит эту проблему при помощи
того, что соглашение о присвоении имен часто используется для внешних ключей:
Логика Основной алгоритм для этой задачи был бы следующим: Поскольку повторение списка заполненной таблицы, чтобы найти совпадение
может быть медленным для моделей с большим количеством таблиц, необходимо
его оптимизировать, предварительно вычисляя все возможные имена внешнего
ключа в данной схеме.
Создание плагина из скрипта Чтобы создать плагин из произвольного скрипта, сначала необходимо сделать
файл модулем и экспортировать необходимую функцию из него.
Тогда необходимо объявить модуль как плагин и определить аргументы типа
возврата и входные аргументы. С добавлением предыдущего кода функция
Приложение C. Расширение MySQL Workbench
C.1.
GRT и организация данных в Workbench
db.mysql.Table
будет db_mysql_Table
в Python.
Дерево объектов приложения (GRT Tree)
Главные узлы в дереве объекта приложения
Узел
Описание wb.registry
Данные приложения, такие как регистрация плагинов,
список редакторов и варианты. wb.customData
Универсальный словарь для данных можно использовать, чтобы хранить
собственные данные. Этот словарь сохраняется и перезагружается с
Workbench, он глобален (не определен для документа). wb.options
Содержит некоторые опции по умолчанию, которые используются Workbench.
wb.rdbmsMgmt
Внутренняя регистрация поддержанных модулей, известных типов данных. wb.doc
В настоящее время загруженный документ. wb.doc.physicalModels[0]
В настоящее время загруженный объект модели, содержит каталог
базы данных и диаграммы. wb.doc.physicalModels[0].catalog
Каталог базы данных для модели. Содержит список схем. wb.doc.physicalModels[0]catalog.schemata
Список схем в модели. К отдельной схеме можно получить доступ как
к списку: schemata[0], schemata[1] ... wb.doc.physicalModels[0].catalog.schemata[0].tables
(.views, .routines, ...)
Списки таблиц, представлений и подпрограмм в схеме. wb.doc.physicalModels[0].diagrams
Список EER-диаграмм в модели. wb.doc.physicalModels[0].diagrams[0].figures
(.layers, .connections, ...)
Список рисунков, слоев и связей (отношений) в диаграмме.
C.2. Модули
grt
вместо внешнего файла.
Список модулей, загруженных в grt
,
получен из grt.modules
.
Модули могут быть импортированы в Python, используя такой запрос, как
from grt.modules import WbModel
.
Операционная система
Путь к файлу Windows
%AppData%\MySQL\Workbench\modules macOS
~username/Library/Application Support/MySQL/Workbench/modules Linux
~username/.mysql/workbench/modules _grt.py
, например,
my_module_grt.py
.DefineModule
из модуля wb:
from wb import *
ModuleInfo = DefineModule(name='MyModule', author='Your Name', version='1.0')
@ModuleInfo.export(grt.INT, grt.STRING)
def checkString(s):
...
export
тип возврата перечисляется
сначала, сопровождается входными типами параметра, определенными как имена
типов GRT. Следующие имена типов могут использоваться:grt.INT
:
Целочисленное значение. Также используемый для булевых значений.grt.DOUBLE
:
Числовое значение с плавающей запятой.grt.STRING
: Строка в UTF-8 или ASCII.grt.DICT
: Элемент словаря значения ключа.
Ключи должны быть последовательностями.grt.LIST
: Список других значений.
Возможно определить тип содержания как кортеж в форме
(grt.LIST, <type-or-class>)
. Например,
(grt.LIST, grt.STRING) для списка последовательностей. Для списка объектов
таблицы было бы определено следующее:
(grt.LIST, grt.classes.db_table)
.grt.OBJECT
:
Экземпляр объекта GRT или объект класса GRT из
grt.classes
.grt
, который
должен быть импортирован, прежде чем они будут доступны для использования.
from wb import *
import grt
ModuleInfo = DefineModule(name='MyModule', author="your name", version='1.0')
@ModuleInfo.export(grt.DOUBLE, grt.STRING, (grt.LIST, grt.DOUBLE))
def printListSum(message, doubleList):
sum = 0
for d in doubleList:
sum = sum + d
print message, sum
return sum
C.3. Плагины и инструменты
plugin
объекта
ModuleInfo
.
Операционная система
Путь к файлу Windows %AppData%\MySQL\Workbench\modules
macOS
~username/Library/Application Support/MySQL/Workbench/modules Linux ~username/.mysql/workbench/modules
@ModuleInfo.plugin(plugin_name, caption, [input], [groups], [pluginMenu])
Overview/Utility
:
в Model Overview.Model/Utility
: Меню для объектов диаграммы.
Menu/<category>
: Подменю
в главном меню.Menu/<category>
в списке групп.
C.4. Добавление GUI к плагину, используя MForms
mforms
.C.5. Workbench Scripting Shell
C.5.1.
Исследуя скрипты Workbench Scripting Shell
C.5.2. Окно Shell
?
.
Можно также вырезать и вставить текст в и из окна оболочки.
Unnamed
для отрывков без имени. Можно вырезать и вставить их
или щелкнуть правой кнопкой мыши по отрывку, чтобы открыть контекстное меню
с вариантами ,
и
.
Help Topics
-----------
grt General information about the Workbench runtime
scripting Practical information when working on scripts and modules for Workbench
wbdata Summary about Workbench model data organization
modules Information about Workbench module usage
plugins Information about writing Plugins and Modules for Workbench
Type '? [topic]' to get help on the topic.
Custom Python Modules
---------------------
grt Module to work with Workbench runtime (grt) objects
grt.root The root object in the internal Workbench object hierarchy
grt.modules Location where Workbench modules are available
grt.classes List of classes known to the GRT system
mforms A Module to access the cross-platform UI toolkit used in some Workbench features
wb Utility module for creating Workbench plugins
Type 'help(module/object/function)' to get information about a module,
object or function.
Type 'dir(object)'to get a quick list of methods an object has.
For an introductory tutorial on the Python language, visit
http://docs.python.org/tutorial/
For general Python and library reference documentation, visit
http://python.org/doc/
input()
или читать из
stdin
.C.5.3.
Вкладки Files, Globals, Classes, Modules и Notifications
Вкладка Files
scripts/
вашего каталога конфигурации
MySQL Workbench. В следующей таблице перечислены местоположения по умолчанию
для каждой платформы.
Операционная система
Путь scripts/
по умолчанию
Linux
~/.mysql/workbench/scripts
macOS
~/Library/Application\
Support/MySQL/Workbench/scripts/
Windows 7
C:\Users\[user]\AppData\Roaming\MySQL\Workbench\scripts\
Вкладка Globals
Вкладка Classes
class
это пользовательский тип данных,
сформированный, объединяя примитивные типы данных: целые числа, строки,
списки и объекты. Эта вкладка показывает определения классов, используемых
объектами во вкладке Modules.
Нажатие на класс заставляет краткое описание класса быть показанным в
панели ниже исследователя классов.
GrtObject
: родительский объект, из которого
получены все другие объекты.Вкладка Modules
Вкладка Notifications
notification
, которые используются
модулями MySQL Workbench. Щелкните по классу уведомления для
описания его использования.
C.6.
Обучающая программа: написание плагинов
C.6.1.
Обучающая программа: произведите код PHP, чтобы создать связь с PDO_MySQL
mysqli
. Эта обучающая программа показывает, как
произвести код с расширением PDO_MySQL
для PHP.
Вы могли бы выбрать иное расширение или иной язык в целом, можно приспособить
произведенный код соответственно.
# import the wb module
from wb import DefineModule, wbinputs
# import the grt module
import grt
# import the mforms module for GUI stuff
import mforms
# define this Python module as a GRT module
ModuleInfo = DefineModule(name= "MySQLPDO", author= "Yours Truly", version="1.0")
@ModuleInfo.plugin("info.yourstruly.wb.mysqlpdo", caption= "MySQL PDO (Connect to Server)", input= [wbinputs.currentSQLEditor()], pluginMenu= "SQL/Utilities")
@ModuleInfo.export(grt.INT, grt.classes.db_query_Editor)
def mysqlpdo(editor):
"""Copies PHP code to connect to the active MySQL connection using PDO, to the clipboard.
"""
# Values depend on the active connection type
if editor.connection:
conn = editor.connection
if conn.driver.name == "MysqlNativeSocket":
params = {
"host" : "",
"port" : "",
"user" : conn.parameterValues["userName"],
"socket" : conn.parameterValues["socket"],
"dbname" : editor.defaultSchema,
"dsn" : "mysql:unix_socket={$socket};dbname={$dbname}"
}
else:
params = {
"host" : conn.parameterValues["hostName"],
"port" : conn.parameterValues["port"] if conn.parameterValues["port"] else 3306,
"user" : conn.parameterValues["userName"],
"socket" : "",
"dbname" : editor.defaultSchema,
"dsn" : "mysql:host={$host};port={$port};dbname={$dbname}"
}
text = """$host="%(host)s";
$port=%(port)s;
$socket="%(socket)s";
$user="%(user)s";
$password="";
$dbname="%(dbname)s";
try {
$dbh = new PDO("%(dsn)s", $user, $password));
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
""" % params
mforms.Utilities.set_clipboard_text(text)
mforms.App.get().set_status_text("Copied PHP code to clipboard")
return 0
PDO_MySQL
.
Определение DSN зависит от типа подключения в MySQL Workbench.php-pdo-connect_grt.py
,
но можно использовать другое имя, пока есть суффикс
_grt.py
.php-pdo-connect_grt.py
.
.pyc
) из вашего исходного файла.
В этом примере это производит файл
php-pdo-connect_grt.pyc
.Caption
, определенным в
рамках кода плагина.
$host="localhost";
$port=3306;
$socket="";
$user="root";
$password="";
$dbname="sakila";
try {
$dbh = new PDO("mysql:host={$host};port={$port};dbname={$dbname}",
$user, $password));
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
C.6.2.
Обучающая программа: создание внешних ключей с MyISAM
tablename_primarykeyname
.
Используя это соглашение, могут автоматически быть созданы внешние ключи
после того, как база данных перепроектирована, что приведет к линиям
связей в диаграмме EER.
for each table in the schema
for each column in the table
look for another table whose name and primary key name
match the current column name
if such a table is found, add a foreign key referencing it
import grt
def auto_create_fks(schema):
fk_name_format = "%(table)s_%(pk)s"
possible_fks = {}
# create the list of possible foreign keys from the list of tables
for table in schema.tables:
if table.primaryKey:
format_args = {'table':table.name, 'pk':table.primaryKey.name}
fkname = fk_name_format % format_args
possible_fks[fkname] = table
# go through all tables in schema, this time to find columns that may be a fk
for table in schema.tables:
for column in table.columns:
if possible_fks.has_key(column.name):
ref_table = possible_fks[column.name]
if ref_table.primaryKey.formattedType != column.type:
continue
fk = table.createForeignKey(column.name+"_fk")
fk.referencedTable = ref_table
fk.columns.append(column)
fk.referencedColumn.append(ref_table.primaryKey)
print "Created foreign key %s from %s.%s to %s.%s" \
% (fk.name, table.name, column.name, ref_table.name,
ref_table.primaryKey.name)
auto_create_fks(grt.root.wb.doc.physicalModels[0].catalog.schemata[0])
from wb import *
import grt
ModuleInfo = DefineModule(name="AutoFK", author="John Doe", version="1.0")
@ModuleInfo.plugin("sample.createGuessedForeignKeys",
caption="Create Foreign Keys from ColumnNames",
input=[wbinputs.objectOfClass("db.mysql.schema")],
groups=["Overview/Utility"])
@ModuleInfo.export(grt.INT, grt.classes.db_mysql_Schema)
def auto_create_fks(schema):
...
auto_create_fks()
экспортируется и будет
добавлена к контекстному меню схемы. Когда вызвана, она получает в настоящее
время выбранную схему как свой вход.
Найди своих коллег! |
Вы можете направить письмо администратору этой странички, Алексею Паутову.