如何在 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怎么导入数据库

如何在 MySQL Workbench 中使用 Python 脚本执行 SQL 查询

如何在 MySQL Workbench 中隐藏/查看结果网格?

如何使用 MySQL Workbench 创建函数?

如何在 phpmyadmin/MySQL Workbench 中修改只能使用 FlameRobin 访问的数据库

如何在 Mysql Workbench GUI 中查看表格内容?