4.2.3 Скриптовые сессии в режимах JavaScript и Python
Вы можете использовать функции, доступные в режимах JavaScript и Python, для создания нескольких объектов сессии выбранных типов и присваивания их переменным. Эти объекты сессии позволяют устанавливать и управлять одновременными подключениями для работы с несколькими экземплярами MySQL Server или с одним экземпляром по-разному из одного экземпляра MySQL Shell.
Функции для создания объектов сессии доступны в модулях JavaScript и Python mysqlx и mysql. Эти модули должны быть импортированы перед использованием, что происходит автоматически при использовании MySQL Shell в интерактивном режиме. Функция mysqlx.getSession() открывает подключение к протоколу X к экземпляру MySQL Server, используя указанные данные подключения, и возвращает объект Session для представления подключения. Функции mysql.getClassicSession() и mysql.getSession() открывают подключение к классическому протоколу MySQL к экземпляру MySQL Server, используя указанные данные подключения, и возвращают объект ClassicSession для представления подключения. При использовании этих функций протокол подключения, используемый MySQL Shell, встроен в функцию, а не выбирается с помощью отдельного параметра, поэтому необходимо выбрать соответствующую функцию для правильного протокола для порта.
MySQL Shell предоставляет метод openSession() в глобальном объекте shell, который можно использовать в режимах JavaScript или Python. shell.openSession() работает как с протоколом X, так и с классическим протоколом MySQL. Вы можете указать протокол подключения как часть данных подключения или позволить MySQL Shell автоматически определить его на основе других параметров подключения (например, номер порта по умолчанию для протокола).
Данные подключения для всех этих функций могут быть указаны как строка подключения в формате URI или как словарь пар ключ-значение. Вы можете получить доступ к возвращаемому объекту сессии, используя переменную, которой вы его присвоили. Этот пример демонстрирует, как открыть подключение к классическому протоколу MySQL, используя функцию mysql.getClassicSession(), которая возвращает объект 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();
shell.status()
MySQL Shell version 8.1.0-commercial
Connection Id: 9
Current schema:
Current user: root@localhost
SSL: Cipher in use: TLS_AES_256_GCM_SHA384 TLSv1.3
Using delimiter: ;
Server version: 8.1.0-commercial MySQL Enterprise Server - Commercial
Protocol version: Classic 10
Client library: 8.1.0
Connection: localhost via TCP/IP
TCP port: 3306
Server characterset: utf8mb4
Schema characterset: utf8mb4
Client characterset: utf8mb4
Conn. characterset: utf8mb4
Result characterset: utf8mb4
Compression: Disabled
Uptime: 9 hours 42 min 5.0000 sec
Threads: 2 Questions: 61 Slow queries: 0 Opens: 176 Flush tables: 3 Open tables: 95 Queries per second avg: 0.001
Объект сессии s3 теперь доступен через глобальный объект session, поэтому к подключению протокола X, которое он представляет, можно получить доступ из любого режима MySQL Shell: режим SQL, режим JavaScript и режим Python. Подробности этого подключения также можно отобразить с помощью метода shell.status(), который отображает только подробности подключения, представленного глобальным объектом session. Если экземпляр MySQL Shell имеет одно или несколько открытых подключений, но ни одно из них не установлено как глобальный объект session, метод shell.status() возвращает «“Не подключено”.
Объект сессии, который вы устанавливаете с помощью shell.setSession(), заменяет любой существующий объект сессии, установленный как глобальный объект session. Если заменённый объект сессии первоначально был создан и присвоен переменной с помощью одной из функций mysqlx или mysql или shell.openSession(), он по-прежнему существует, и его подключение остаётся открытым. Вы можете продолжить использовать это подключение в режиме MySQL Shell, где оно было первоначально создано, и вы можете сделать его глобальным объектом session снова в любое время, используя shell.setSession(). Если заменённый объект сессии был создан методом shell.connect() и присвоен переменной, то же самое верно. Если заменённый объект сессии был создан при запуске MySQL Shell или с помощью команды \connect или метода shell.connect(), но без присвоения его переменной, его подключение закрывается, и вам необходимо создать объект сессии заново, если вы хотите использовать его снова.
© 2025 Oracle
Licensed under the GPLv2 License.