5.6批处理代码执行

除了交互式代码执行,MySQL Shell还提供从以下方式执行批处理代码:

  • 为处理而加载的文件。

  • 一个包含重定向到执行的标准输入的代码的文件。

  • 来自不同源的代码被重定向到执行的标准输入。

提示

作为文件批量执行的替代方案,您还可以从终端控制MySQL Shell,参见第5.8节,“API命令行集成”

在批处理模式中,所描述的所有命令逻辑第5.2节,“交互式代码执行”不可用,则只能执行活动语言的有效代码。在处理SQL代码时,使用以下逻辑逐条执行:读取/处理/打印结果。在处理非sql代码时,它完全从输入源加载并作为一个单元执行。使用——互动(或-我)命令行选项配置MySQL Shell处理输入源,就像它是在交互模式下发出的;这使得交互式模式提供的所有特性都可以在批处理中使用。

请注意

在本例中,无论源是什么,都将逐行读取并使用交互管道进行处理。

根据MySQL Shell中选择的当前编程语言处理输入,默认为JavaScript。方法可以更改默认编程语言defaultModeMySQL Shell配置选项。具有扩展名的文件. js. py,. sql总是在适当的语言模式下处理,而不管默认的编程语言是什么。

这个例子展示了如何从文件中加载JavaScript代码进行批处理:

Shell > mysqlsh——file code.js

在这里,JavaScript文件被重定向到标准输入执行:

Shell > mysqlsh < code.js

这个例子展示了如何将SQL代码重定向到执行的标准输入:

Shell > echo“显示数据库”| mysqlsh——sql——uri user@192.0.2.20:33060

从MySQL Shell 8.0.22——宾命令行选项可在Python模式下以脚本形式执行指定的Python模块。该选项的工作方式与Python的相同- m命令行选项。

可执行的脚本

在Linux上,您可以创建可执行脚本,通过包含一个MySQL Shell运行#!行作为脚本的第一行。这一行应该提供MySQL Shell的完整路径,并包括——文件选择。例如:

#!/usr/local/mysql-shell/bin/mysqlsh --file print("Hello World\n");

脚本文件必须在文件系统中标记为可执行文件。运行脚本会调用MySQL Shell,它会执行脚本的内容。

在脚本中执行SQL

用于X协议会话的SQL查询执行通常使用sql ()函数,该函数接受一个SQL语句作为字符串,并返回一个SqlExecute对象,您可以使用该对象绑定和执行查询并返回结果。此方法在在会话中使用SQL.然而,经典MySQL协议会话的SQL查询执行使用runSql ()函数,它接受SQL语句及其参数,将指定的参数绑定到指定的查询中,并在单个步骤中执行查询并返回结果。

如果您需要创建一个MySQL Shell脚本,它独立于连接到MySQL服务器的协议,MySQL Shell提供了一个session.runSql ()函数,其工作方式与runSql ()函数在经典的MySQL协议会话。你可以在MySQL Shell中使用这个函数来代替sql (),这样您的脚本就可以使用X协议会话或经典的MySQL协议会话。Session.runSql ()返回一个SqlResult对象,它与经典MySQL协议函数返回的ClassicResult对象的规范相匹配,因此可以用相同的方式处理结果。

请注意

Session.runSql ()是MySQL Shell X DevAPI在JavaScript和Python中的专属实现,而不是标准X DevAPI的一部分。

要浏览查询结果,可以使用fetchOneObject ()函数,它适用于经典的MySQL协议和X协议。此函数将返回下一个结果作为脚本对象。列名用作字典中的键(如果它们是有效的标识符,则用作对象属性),而行值用作字典中的属性值。对对象进行的更新不会持久保存在数据库中。

例如,MySQL Shell脚本中的这段代码可以使用X协议会话或经典的MySQL协议会话来检索和输出给定国家的城市名称:

var resultSet = myssession . runsql ("SELECT * FROM city WHERE countrycode = ' AUT'");var row = resultSet.fetchOneObject();打印(行['名字']);