В сценариях Python для MySQL Workbench 5.2.34 grt.root.wb не имеет физических моделей - PullRequest
1 голос
/ 04 июля 2011

Объект 'wb' (и, очевидно, все вышестоящие объекты) загружает и хранит информацию, но дерево для доступа к физической модели базы данных просто не загружается.Поиски в интернете до сих пор приносили мне бипкис.

(Я собирался написать подпрограмму для проверки существования определенных столбцов и программно добавить соответствующий триггер. Я разработал kludge с помощью регулярного выражения иэкспорт базы данных, но это немного раздражает.)

Отсутствует какая-либо форма простой активации?(возможно соединение)

Следующая ошибка завершается с ошибкой «AttributeError: у объекта« NoneType »нет атрибута« PhysicalModels »»:

# -*- coding: utf-8 -*-
# MySQL Workbench Python script
# <description>
# Written in MySQL Workbench 5.2.34

import grt
#import mforms #??
stOut=""
stTrigger="""
delimiter $$ 
create trigger `docdb_mk2`.tsi_{t} before insert on `docdb_mk2`.`{t}` 
for each row begin
set new.inserted=now();
end$$"""

# iterate through all tables from schema"""
schema = grt.root.wb.doc.physicalModels[0].catalog.schemata[0]
for table in schema.tables:
    #print table.name
    #if table. 
    #check to make sure both inserted and Updated are in the table
    #Since I have no clue how to do that in here, I'll skip it for now.
    stOut=stOut+stTrigger(t=table.name)

Даже если это не удается:

# -*- coding: utf-8 -*-
# MySQL Workbench Python script
# <description>
# Written in MySQL Workbench 5.2.34
import grt
#import mforms
# iterate through all schemas

for schema in grt.root.wb.doc.physicalModels[0].catalog.schemata:
    print schema.name

Обратите внимание, что в данный момент я не прошу совета по моему SQL, просто по поводу этого раздражающего барьера в сценариях.

Редактировать: очевидно, некоторые объекты загружаются при загрузке этих элементов в пользовательском интерфейсе.Если есть какой-то способ заставить их загружаться в другом месте, я был бы признателен, если бы вы знали, но кажется, что если вы загружаете модуль сценариев с основного экрана Workbench, вы получаете частично инициализированный объект wb.Если вы загружаете объект из другой подсистемы, такой как модуль моделирования данных (Scripting> Run Workbench Script File ...), другие части загружаются и начинают работать.Хм.

Ответы [ 3 ]

2 голосов
/ 03 апреля 2012

Вы должны открыть модель (файл * .mwb) из своего рабочего места или, если она не существует, создать ее (выберите «Создать модель из существующей базы данных»). Это должно заставить вашу ошибку исчезнуть.

2 голосов
/ 30 ноября 2012

Я нашел решение для этого:

print results.rowCount()  
# the above throws an exception because what is returned from executeScript() differs from the docs 

Это сработает, если вы напишите свои заявления против первого элемента в списке db_query_Resultset без ().
То есть print results[0].rowCount работает.

2 голосов
/ 13 июля 2011

Хотя это не полное решение, моя работа еще не завершена, и я тоже пытаюсь это выяснить.Из того, что я могу сказать, объект wb.docs.physicalModels доступен только в режиме «дизайн / модель», что мне нужно сделать, чтобы запустить скрипт в режиме редактора SQL.Код ниже выполняет запросы и возвращает результаты, но я борюсь с документацией, не соответствующей тому, что я вижу в объектах прямо сейчас.Надеюсь, что это некоторые справка

import grt

for editor in grt.root.wb.sqlEditors:
    # add some text to the 'Output' tab
    editor.addToOutput("Test", 0)

    results = editor.executeScript("show tables")
    #print results.rowCount()
    # the above throws an exception because what is returned from executeScript() differs from the docs
    print results

    for buffer in editor.queryBuffers:
        print buffer.replaceContents("test")
...