除了交互式代码执行,MySQL Shell 还提供从以下位置进行批处理代码执行
加载用于处理的文件。
包含重定向到标准输入以供执行的代码的文件。
从其他来源重定向到标准输入以供执行的代码。
作为文件批处理执行的替代方法,您还可以从终端控制 MySQL Shell,请参阅 第 5.8 节,“API 命令行集成”。
在批处理模式下,第 5.2 节,“交互式代码执行” 中描述的所有命令逻辑都不可用,只能执行活动语言的有效代码。在处理 SQL 代码时,它使用以下逻辑逐条语句地执行:读取/处理/打印结果。在处理非 SQL 代码时,它会从输入源中完全加载并作为单元执行。使用 --interactive
(或 -i
)命令行选项将 MySQL Shell 配置为处理输入源,就像在交互模式下发出一样;这使得交互模式提供的所有功能都可以在批处理中使用。
在这种情况下,无论源是什么,它都会逐行读取并使用交互式管道进行处理。
输入的处理基于 MySQL Shell 中选择的当前编程语言,默认为 JavaScript。您可以使用 defaultMode
MySQL Shell 配置选项更改默认编程语言。扩展名为 .js
、.py
和 .sql
的文件始终以相应的语言模式处理,而不管默认编程语言是什么。
此示例展示了如何从文件中加载 JavaScript 代码以进行批处理
$> mysqlsh --file code.js
此处,JavaScript 文件被重定向到标准输入以供执行
$> mysqlsh < code.js
以下示例展示了如何在 Linux 平台上将 SQL 代码重定向到标准输入以供执行
$> echo "show databases;" | mysqlsh --sql --uri [email protected]:33060
要在 Windows 平台上运行此命令,您必须删除 echo
命令中字符串周围的引号。
--pym
命令行选项可用于在 Python 模式下将指定的 Python 模块作为脚本执行。该选项的工作方式与 Python 的 -m
命令行选项相同。
在 Linux 上,您可以通过在脚本的第一行包含 #!
行来创建使用 MySQL Shell 运行的可执行脚本。此行应提供 MySQL Shell 的完整路径并包含 --file
选项。例如
#!/usr/local/mysql-shell/bin/mysqlsh --file
print("Hello World\n");
脚本文件必须在文件系统中标记为可执行文件。运行脚本将调用 MySQL Shell,它将执行脚本的内容。
X 协议会话的 SQL 查询执行通常使用 sql()
函数,该函数将 SQL 语句作为字符串,并返回一个 SqlExecute 对象,您可以使用该对象绑定和执行查询并返回结果。此方法在 使用会话中的 SQL 中进行了描述。但是,经典 MySQL 协议会话的 SQL 查询执行使用 runSql()
函数,该函数采用 SQL 语句及其参数,将指定参数绑定到指定查询中,并一步执行查询,返回结果。
如果您需要创建一个独立于用于连接到 MySQL 服务器的协议的 MySQL Shell 脚本,MySQL Shell 为 X 协议提供了一个 session.runSql()
函数,它的工作方式与经典 MySQL 协议会话中的 runSql()
函数相同。您只能在 MySQL Shell 中使用此函数来代替 sql()
,以便您的脚本可以使用 X 协议会话或经典 MySQL 协议会话。 Session.runSql()
返回一个 SqlResult 对象,该对象与经典 MySQL 协议函数返回的 ClassicResult 对象的规范匹配,因此结果可以用相同的方式处理。
Session.runSql()
是 JavaScript 和 Python 中 MySQL Shell X DevAPI 实现独有的,不是标准 X DevAPI 的一部分。
要浏览查询结果,您可以使用 fetchOneObject()
函数,该函数适用于经典 MySQL 协议和 X 协议。此函数将下一个结果作为脚本对象返回。列名用作字典中的键(如果它们是有效的标识符,则用作对象属性),行值用作字典中的属性值。对对象所做的更新不会持久化到数据库中。
例如,MySQL Shell 脚本中的这段代码可以使用 X 协议会话或经典 MySQL 协议会话来检索和输出给定国家/地区的城市名称
var resultSet = mySession.runSql("SELECT * FROM city WHERE countrycode = ' AUT'");
var row = resultSet.fetchOneObject();
print(row['Name']);