Как выполнить SQL-запрос с помощью скрипта Python в MySQL Workbench

Я хочу выполнять SQL-запросы из среды сценариев Python в MySQL Workbench. Я просмотрел документацию по MySQL Workbench для модуля grt и нашел файл executeScript метод, но я не могу использовать его для запросов.

Выполнение этого кода Python:

import grt

querystring = "select * from Purchases WHERE PurchaseAmount > 600 and PurchaseAmount < 2500"
executeScript(querystring)

выдает следующее сообщение об ошибке:

Uncaught exception while executing [filepath]runquery.py:

File "[filepath]runquery.py", line 10, in <module>

executeScript(querystring)

NameError: name 'executeScript' is not defined

Я не понимаю, что означает виртуальный grt::ListRef executeScript ( const std::string & sql ), поэтому я не могу правильно отформатировать свой запрос, однако сообщение об ошибке, похоже, указывает на то, что executeScript метода все равно не существует. Большинство документации, которую я просматриваю, содержит примеры правильно отформатированных вызовов функций, но я не могу найти их для executeScript.

Все, что я хочу сделать, это буквально запустить мою строку как SQL-запрос в среде сценариев MySQL Workbench Python.

Спасибо!

Я новичок в Python и SQL, поэтому наберитесь терпения. :)


person JaneGoodall    schedule 04.04.2013    source источник
comment
По требованию пользователя это ДОЛЖНО выполняться в среде MySQL Workbench Scripting Shell.   -  person JaneGoodall    schedule 05.04.2013


Ответы (3)


Чтобы запустить функцию executeScript, вам нужно взаимодействовать с объектом sqleditor. Для тестирования выполните следующее в MS Windows с примерами баз данных:

  1. Запустите MySQLWorkbench
  2. подключиться к локальной базе данных
  3. выберите сакила из СХЕМ
  4. запустить скриптовую оболочку с помощью Tools->scripting shell или (Ctrl+F3)
  5. Добавьте новый скрипт Python (test.py)
  6. Сохраните скрипт с содержимым ниже
  7. запустить скрипт в оболочке сценариев

Содержание скрипта:

import grt

result = grt.root.wb.sqlEditors[0].executeScript("select * from actor limit 10;")

for col in result[0].columns:
    print col.name

Чтобы узнать, как ссылаться на объекты в скрипте, очень просто использовать браузер классов панели Globals Tree, щелкнуть правой кнопкой мыши по объекту и выбрать «Копировать путь для Python».

person jshepherd    schedule 21.02.2014

Вы можете запустить что-то вроде следующей команды, если вам нужно запустить скрипт из командной строки в Windows:

"C:\Program Files\MySQL\MySQL Workbench 6.1 CE\MySQLWorkbench.exe" -query "Local instance MySQL56" -run-python "execfile('c:\Users\Root\AppData\Roaming\MySQL\Workbench\scripts\script.py')" -log-to-stderr -v
person l0pan    schedule 12.05.2014
comment
Спасибо, но этот вопрос касался выполнения SQL-запроса в сценарии Python из MySQL Workbench, а не из cmd.exe или PowerShell. - person JaneGoodall; 17.05.2014
comment
Проголосовал только потому, что хорошо знать, как выполнять из cmd - person Roberto; 16.06.2015

(Первая) проблема, похоже, заключается в том, что вы используете функцию с именем executeScript(), которую вы не определили и не взяли ниоткуда. Если он находится в модуле grt (с которым я не знаком), вы должны сделать это следующим образом:

from grt import executeScript

querystring = "select * from Purchases WHERE PurchaseAmount > 600 and PurchaseAmount < 2500"
executeScript(querystring)
person kramer65    schedule 04.04.2013
comment
Я импортировал весь модуль с помощью import grt... Несмотря на то, что замена этого на from grt import executeScript приводит к ошибке NameError: имя «executeScript» не определено - person JaneGoodall; 05.04.2013
comment
@JaneGoodall - Дело в том, что вам нужно либо явно импортировать этот метод, выполнив «from grt import executeScript», либо использовать префикс grt для метода, выполнив «grt.executeScript ()». Именно так работает Python. Однако мне кажется интересным, что даже если вы теперь явно импортируете метод, он по-прежнему кажется неопределенным. Я думаю, вам нужно показать нам еще немного вашего кода, прежде чем мы сможем его оценить. Почему бы не использовать pastebin для публикации всего скрипта? - person kramer65; 05.04.2013
comment
Весь мой сценарий находится в исходном вопросе, в первом сером поле. Я думаю, что executeScript — это метод уровня экземпляра (трудно сказать, потому что я не понимаю документацию, на которую я ссылался в исходном вопросе), поэтому мне нужно создать экземпляр объекта правильного типа и вызвать его как obj. выполнить скрипт (фу, бар). Обычно этот объект представляет собой соединение с сервером а), но я уже подключен к серверу в MySQL Workbench и б) вызывая его таким образом, мне нужно ввести пароль в файл Python в виде открытого текста, что действительно опасно. - person JaneGoodall; 05.04.2013
comment
Кроме того, изменение моего вызова на grt.executeScript(querystring, 'sql') приводит к AttributeError: объект 'module' не имеет атрибута 'executeScript' - person JaneGoodall; 05.04.2013
comment
Ах, в таком случае, боюсь, я не смогу вам здесь помочь. Но просто примечание о пароле в файле python. Я не знаю, будете ли вы распространять этот сценарий, но пока он просто сидит и работает на вашем собственном компьютере, я не думаю, что вам есть о чем беспокоиться. - person kramer65; 05.04.2013
comment
Почему бы не попробовать импортировать модуль в интерактивную командную строку Python, а затем выполнить команду dir(grt), чтобы увидеть, какие у него есть методы. Возможно, этот метод executeScript() является подметодом какого-то другого класса. - person kramer65; 05.04.2013
comment
Он будет работать на чужом компьютере, и я выгляжу неряшливым, если пользователю приходится редактировать сценарий каждый раз, когда он должен его использовать. Это мой первый проект по кодированию в моей компании, поэтому я не могу в нем заниматься подобными хаками. Теперь все работает отлично, за исключением того, что я не могу выполнить сценарий SQL в среде MySQL Workbench Python. - person JaneGoodall; 05.04.2013
comment
kramer65, можно посмотреть документацию по executeScript? Я не понимаю, что это значит, и почему-то нет пробного звонка. mysqlworkbench.org/workbench/doc/globals/ - person JaneGoodall; 05.04.2013
comment
Ах, вот так. Извините, но я не знаком с модулем grt или рабочей средой MySQL, так как обычно я напрямую подключаюсь к БД из Python. В любом случае удачи. Здесь пора спать, так что я желаю тебе всего наилучшего после моего сна. - person kramer65; 05.04.2013
comment
Спасибо Крамер. Я пишу его для аналитика бизнес-данных, поэтому его нужно запускать из MySQL Workbench. - person JaneGoodall; 05.04.2013