如何在 MySQL Workbench 中使用 Python 脚本执行 SQL 查询
Posted
技术标签:
【中文标题】如何在 MySQL Workbench 中使用 Python 脚本执行 SQL 查询【英文标题】:How to execute an SQL query with Python script in MySQL Workbench 【发布时间】:2013-03-27 03:56:22 【问题描述】:我想从 mysql Workbench 中的 Python 脚本环境执行 SQL 查询。我查看了MySQL Workbench documentation for the grt module 并找到了 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。
我只想在 MySQL Workbench Python 脚本环境中将我的字符串作为 SQL 查询运行。
谢谢!
我是 Python 和 SQL 的新手,所以请耐心等待。 :)
【问题讨论】:
作为用户要求,它必须在 MySQL Workbench Scripting Shell 环境中运行。 【参考方案1】:要运行 executeScript 函数,您需要与 sqleditor 对象进行交互。 为了进行测试,请在 MS Windows 上使用示例数据库执行以下操作:
-
启动 MySQLWorkbench
连接到本地数据库
从 SCHEMAS 中选择 sakila
用Tools->scripting shell或(Ctrl+F3)启动脚本shell
添加新的 Python 脚本 (test.py)
使用以下内容保存脚本
在脚本外壳中运行脚本
脚本内容:
import grt
result = grt.root.wb.sqlEditors[0].executeScript("select * from actor limit 10;")
for col in result[0].columns:
print col.name
要了解如何在脚本中引用对象,使用全局树面板的类浏览器并使用鼠标右键单击对象并选择“复制 Python 路径”非常容易
【讨论】:
【参考方案2】:如果您需要在 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
【讨论】:
谢谢,但这个问题是关于在 MySQL Workbench 的 Python 脚本中执行 SQL 查询,而不是从 cmd.exe 或 PowerShell。 赞成只是因为知道如何从 cmd 执行是件好事【参考方案3】:(第一个)问题似乎是您使用了一个名为 executeScript() 的函数,该函数尚未定义或从任何地方获取。如果它在 grt 模块中(我不熟悉),你必须这样做:
from grt import executeScript
querystring = "select * from Purchases WHERE PurchaseAmount > 600 and PurchaseAmount < 2500"
executeScript(querystring)
【讨论】:
我用“import grt”导入了整个模块...即使用“from grt import executeScript”替换它也会产生“NameError: name 'executeScript' is not defined” @JaneGoodall - 问题是您要么通过执行'from grt import executeScript'明确地导入该方法,要么通过执行'grt.executeScript()'为该方法使用grt-prefix。这就是 Python 的工作原理。不过,我确实觉得这很有趣,即使您现在明确地导入该方法,它似乎仍然是未定义的。我认为您确实需要向我们展示更多代码,然后我们才能对其进行判断。为什么不使用 pastebin 发布整个脚本? 我的整个脚本都在原始问题中,在第一个灰色框中。我认为 executeScript 是一个实例级别的方法(很难说,因为我不理解我在原始问题中链接的文档)所以我需要创建一个正确类型的对象的实例并将其称为 obj.执行脚本(foo,bar)。通常,此对象是与服务器的连接 a) 但我已经连接到 MySQL Workbench 中的服务器 b) 以这种方式调用它需要我将密码以明文形式放入 Python 文件中,这真的很危险。跨度> 另外,将我的调用更改为 grt.executeScript(querystring,'sql') 会产生“AttributeError: 'module' object has no attribute 'executeScript'” 啊,那样的话我恐怕帮不了你了。但只是关于python文件中密码的注释。我不知道你是否会分发这个脚本,但只要它只是在你自己的计算机上运行,我认为没有什么可担心的。以上是关于如何在 MySQL Workbench 中使用 Python 脚本执行 SQL 查询的主要内容,如果未能解决你的问题,请参考以下文章
如何在 MySQL Workbench 中使用 Python 脚本执行 SQL 查询
如何在 MySQL Workbench 中隐藏/查看结果网格?