MySQL 8.0外壳/.../ 在JavaScript和Python模式下编写会话

4.2.3使用JavaScript和Python脚本编写会话

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

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

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

所有这些函数的连接数据都可以指定为一个类似uri的连接字符串,或者指定为键值对的字典。可以使用分配给它的变量访问返回的会话对象。这个例子展示了如何使用mysql.getClassicSession ()函数,返回aClassicSession对象来表示连接:

var s1 = mysql.getClassicSession('用户@localhost: 3306”、“密码”);mysql-js > s1 < ClassicSession:用户@localhost: 3306 >

这个例子展示了如何使用shell.openSession ()在Python模式下打开X协议连接,该连接需要压缩。一个会话对象返回:

Mysql-py > s2 = shell.open_session('mysqlx://用户@localhost: 33060 ?压缩=要求”、“密码mysql-py> s2 用户@localhost: 33060 >

在JavaScript模式下使用这些函数创建的会话对象只能在JavaScript模式下使用,如果会话对象是在Python模式下创建的,也会发生相同的情况。不能在SQL模式下创建多个会话对象。虽然只能在创建会话对象的模式中使用其赋值的变量引用会话对象,但可以使用shell.setSession ()方法设置为会话全局对象:已创建并分配给变量的会话对象。例如:

var s3 = mysqlx.getSession('用户@localhost: 33060”、“密码”);mysql-js > s3 <会话:用户@localhost: 33060 > mysql-js > shell.setSession (s3);<会话:用户@localhost:33060 mysql-js>会话<会话:用户@localhost: 33060 > mysql-js > shell.status ();MySQL Shell版本8.0.18会话类型:X协议连接Id: 5当前模式:当前用户:用户@localhost……TCP端口:33060…

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

使用设置的会话对象shell.setSession ()替换设置为的任何现有会话对象会话全局对象。如果替换的会话对象最初是使用mysqlxmysql函数或shell.openSession (),它仍然存在,它的联系仍然是开放的。您可以在MySQL Shell模式中继续使用这个连接,也就是它最初创建的地方,您可以将它放入会话在任何时候再次使用全局对象shell.setSession ().如果替换的会话对象是用shell.connect ()方法并将其赋值给一个变量时,也是如此。如果替换的会话对象是在启动MySQL Shell时创建的,或者使用\连接命令,或使用shell.connect ()方法,但不将其分配给变量,则其连接将关闭,如果要再次使用该会话对象,则必须重新创建该会话对象。