【问题标题】:How to execute an SQL query with Python script in MySQL Workbench如何在 MySQL Workbench 中使用 Python 脚本执行 SQL 查询
【发布时间】: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 环境中运行。

标签: python mysql mysql-python mysql-workbench database-administration


【解决方案1】:

要运行 executeScript 函数,您需要与 sqleditor 对象进行交互。 为了进行测试,请在 MS Windows 上使用示例数据库执行以下操作:

  1. 启动 MySQLWorkbench
  2. 连接到本地数据库
  3. 从 SCHEMAS 中选择 sakila
  4. 用Tools->scripting shell或(Ctrl+F3)启动脚本shell
  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

要了解如何在脚本中引用对象,使用全局树面板的类浏览器并使用鼠标右键单击对象并选择“复制 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文件中密码的注释。我不知道你是否会分发这个脚本,但只要它只是在你自己的计算机上运行,​​我认为没有什么可担心的。
    猜你喜欢
    • 1970-01-01
    • 2012-07-21
    • 2013-05-28
    • 2021-09-10
    • 1970-01-01
    • 1970-01-01
    • 2011-03-15
    • 1970-01-01
    • 2017-01-07
    相关资源
    最近更新 更多