It’s always interesting when somebody asks why they got an error message, and especially sweet when you’re working on something related that lets you answer the question. They were using MySQL Workbench and wanted to know why they couldn’t open a SQL script file by clicking on the Scripting menu option.
As I explained to the individual who asked, you should always click the Edit SQL Script link in the SQL Development section of the MySQL Workbench home page to work on SQL scripts. The Scripting menu option supports Python and Lua plug-ins development and scripts.
They did the following initially, which led down the rabbit warren and left them stumped because they don’t know anything about Python or Lua. This is provided to those who choose to experiment with this advanced feature of MySQL Workbench.
That presents you with a chooser dialog and it lets you pick any
type of file. (You may wonder, as I did, why they didn’t restrict
it to .py
and .lua
file extensions,
which would preclude opening a .sql
file. I actually
logged an enhancement request to see if the development team
may agree with me.) You get the following message when you choose
something other than a Python or Lua script. You can
click on any of the reduced size screen shots to enlarge them and
make them readable.
As you may note, the dialog says the activity is unsupported by provides no cancellation button. Click the OK button and the unsupported file is loaded into a tab that is useless. All you can do is click to close the tab and dismiss the window.
After you dismiss (by clicking the x) the non-editable
.sql
file, you need to click on the Open
Script file icon shown below.
This chooser really should open where the default is for the MySQL Workbench application script files but it doesn’t. It opens in the last accessed directory. You need to navigate to where your Python or Lua scripts are stored, which is the following directory on Windows:
C:\Users\<user_name>\AppData\Roaming\MySQL\Workbench\scripts |
Please note that on a Windows system you can’t chose this directory option because it’s protected. You must enter the navigation bar and type it. Then, you should see any scripts that you saved from within MySQL Workbench.
The ReadFile.py
below contains a rather simplistic
and static program that reads a file and prints it to console
(it’s small and fits in the screen). Obviously, it dispenses with
a bunch to keep it small but check a Python website or book for
the right way to manage a try block and handle exceptions.
Here’s the ReadFile.py
file shown in the preceding
and next screen shots. For those new to Python, watch out because
tabs aren’t equivalent to spaces. I made a change in the script
below to display the trailing semicolon because one of my
students asked about it.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
# -*- coding: utf-8 -*- # MySQL Workbench Python script # ReadFile.py # Written in MySQL Workbench 5.2.41 import os f = open("c:\\Data\\MySQL\\query.sql",'rU') while True: line = f.readline() # Parse string to avoid reading line return. if not line[len(line) - 1:len(line)] == ";": print(line[0:len(line) - 1]) else: print(line) if not line: break |
Life’s funny, and you can never please everyone. The latest
question, “Why did I choose to use substrings when suppressing
line returns from the print()
function is easier?”
Simple answer because the approach differs between Python 2.7 and
3.0 and I didn’t want this post to have a lot of Python nuance.
Python 2.7 (compatible with MySQL Workbench 5.2):
1 2 3 4 5 6 7 8 9 |
import os f = open("c:\\Data\\MySQL\\query.sql",'rU') while True: line = f.readline() # Suppress line return. print(line), if not line: print break |
Python 3.0 (not-compatible with MySQL Workbench 5.2)
You should take note that both version require a print statement
on line #8. Line #6 above shows that Python 2.7 uses a comma to
suppress the line return, and below line #6 shows Python 3
requires you set end
equal to an empty string. Line
#8 below also has a set of empty parentheses, which works in
Python 3.x but not in Python 2.7. Python 2.7 would print the
parentheses unless you put an empty string inside of them, like a
print('')
statement.
1 2 3 4 5 6 7 8 9 |
import os f = open("c:\\Data\\MySQL\\query.sql",'rU') while True: line = f.readline() # Suppress line return. print(line, end = '') if not line: print() break |
Hopefully, everyone concurs the parsing was simpler than explaining all these Python nuances. Although, it’s nice somebody was so curious.
If your script complies with the Python 2.7 rules (that’s what is deployed in MySQL Workbench), click the lighting bolt and your code will run and display the results. That’s shown in the last screen shot.
If you’re interesting in developing plug-ins, check this summary page or this nice example of executing a query to text. Although, rumor has it that certain features may mature over the next year …
Naturally, I hope this helps those experimenting but personally it’s a cool advanced feature of the MySQL Workbench.