Documentation Home
MySQL 外壳 8.0  / 第 4 章 MySQL Shell 入门  / 4.2 MySQL Shell 会话  /  4.2.3 JavaScript 和 Python 模式下的脚本会话

4.2.3 JavaScript 和 Python 模式下的脚本会话

您可以使用 JavaScript 和 Python 模式下可用的函数来创建所选类型的多个会话对象并将它们分配给变量。这些会话对象允许您建立和管理并发连接,以使用多个 MySQL Server 实例,或从单个 MySQL Shell 实例以多种方式使用同一实例。

创建会话对象的函数在 JavaScript 和 Python 模块中 mysqlx可用mysql 。这些模块必须在使用前导入,这是在以交互模式使用 MySQL Shell 时自动完成的。该函数 mysqlx.getSession()使用指定的连接数据打开到 MySQL 服务器实例的 X 协议连接,并返回一个Session对象来表示连接。函数 mysql.getClassicSession()mysql.getSession()使用指定的连接数据打开到 MySQL 服务器实例的经典 MySQL 协议连接,并返回一个ClassicSession 对象来表示连接。有了这些函数,MySQL Shell 使用的连接协议被内置到函数中,而不是使用单独的选项来选择,因此您必须选择合适的函数来为端口匹配正确的协议。

从 MySQL Shell 8.0.20 开始,MySQL Shell 在全局对象中提供了自己的 openSession()方法 shell,可以在 JavaScript 或 Python 模式下使用。 shell.openSession()适用于 X 协议和经典 MySQL 协议。您将连接协议指定为连接数据的一部分,或者让 MySQL Shell 根据您的其他连接参数(例如协议的默认端口号)自动检测它。

所有这些函数的连接数据都可以指定为类似 URI 的连接字符串,或键值对字典。您可以使用分配给它的变量访问返回的会话对象。此示例显示如何使用 mysql.getClassicSession()函数打开经典 MySQL 协议连接,该函数返回一个ClassicSession对象来表示连接:

mysql-js> var s1 = mysql.getClassicSession('user@localhost:3306', 'password');
mysql-js> s1
<ClassicSession:user@localhost:3306>

此示例显示如何 shell.openSession()在 Python 模式下使用连接所需的压缩打开 X 协议连接。返回一个Session对象:

mysql-py> s2 = shell.open_session('mysqlx://user@localhost:33060?compression=required', 'password')
mysql-py> s2
<Session:user@localhost:33060>

使用这些函数在 JavaScript 模式下创建的会话对象只能在 JavaScript 模式下使用,如果会话对象是在 Python 模式下创建的,也会发生同样的情况。您不能在 SQL 模式下创建多个会话对象。尽管您只能在创建它们的模式下使用分配给会话对象的变量来引用会话对象,但您可以在任何模式下使用该 方法将已创建并分配给变量的会话对象shell.setSession()设置为全局对象。session例如:

mysql-js> var s3 = mysqlx.getSession('user@localhost:33060', 'password');
mysql-js> s3
<Session:user@localhost:33060>
mysql-js> shell.setSession(s3);
<Session:user@localhost:33060>
mysql-js> session
<Session:user@localhost:33060>
mysql-js> shell.status();
MySQL Shell version 8.0.18

Session type:                 X Protocol
Connection Id:                5
Current schema:
Current user:                 user@localhost
...
TCP port:                     33060
...

s3现在可以使用全局对象使用 会话对象session,因此可以从任何 MySQL Shell 模式访问它所代表的 X 协议连接:SQL 模式、JavaScript 模式和 Python 模式。现在也可以使用 方法显示此连接的详细信息,该方法仅显示全局对象shell.status()表示的连接的详细信息 。session如果 MySQL Shell 实例有一个或多个打开的连接,但没有一个被设置为session全局对象,则该 shell.status()方法返回Not Connected

您设置的会话对象将 shell.setSession()替换任何已设置为session 全局对象的现有会话对象。如果替换的会话对象最初是使用 mysqlxmysql函数之一创建并分配给变量的shell.openSession(),则它仍然存在并且其连接保持打开状态。你可以在最初创建它的 MySQL Shell 模式下继续使用这个连接,你可以session 随时使用 shell.setSession(). 如果被替换的会话对象是用shell.connect() 方法和赋值给一个变量,同样如此。如果被替换的session对象是在启动MySQL Shell时创建的,或者是使用\connect命令创建的,或者是使用 shell.connect()方法创建的,但没有赋值给变量,那么它的连接是关闭的,如果要再次使用,就必须重新创建session对象。