MySQL Shell 8.0  /  ...  /  JavaScript および Python モードでのスクリプトセッション

このページは機械翻訳したものです。

4.2.3 JavaScript および Python モードでのスクリプトセッション

JavaScript および Python モードで使用可能な関数を使用して、選択したタイプの複数のセッションオブジェクトを作成し、変数に割り当てることができます。 これらのセッションオブジェクトを使用すると、単一の MySQL Shell インスタンスから複数の MySQL Server インスタンスまたは同じインスタンスを複数の方法で操作するための同時接続を確立および管理できます。

セッションオブジェクトを作成する関数は、mysqlxmysql JavaScript および Python モジュールで使用できます。 これらのモジュールは、使用前にインポートする必要があります。これは、MySQL Shell を対話モードで使用する場合に自動的に実行されます。 mysqlx.getSession() 関数は、指定された接続データを使用して MySQL Server インスタンスへの X プロトコル 接続をオープンし、接続を表す Session オブジェクトを戻します。 関数 mysql.getClassicSession() および mysql.getSession() は、指定された接続データを使用して MySQL Server インスタンスへの クラシック MySQL プロトコル 接続を開き、ClassicSession オブジェクトを返して接続を表します。 これらの関数では、MySQL Shell が使用する接続プロトコルは、別のオプションを使用して選択されるのではなく、関数に組み込まれているため、ポートの正しいプロトコルと一致する適切な関数を選択する必要があります。

MySQL Shell 8.0.20 から、MySQL Shell は shell グローバルオブジェクトに独自の openSession() メソッドを提供します。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
...

セッションオブジェクト s3session グローバルオブジェクトを使用して使用できるようになったため、それが表す X プロトコル 接続には任意の MySQL Shell モードからアクセスできます: SQL モード、JavaScript モードおよび Python モード。 この接続の詳細は、session グローバルオブジェクトによって表される接続の詳細のみを表示する shell.status() メソッドを使用して表示することもできます。 MySQL Shell インスタンスに複数のオープン接続があり、それらのいずれも session グローバルオブジェクトとして設定されていない場合、shell.status() メソッドは「未接続」を返します。

shell.setSession() を使用して設定したセッションオブジェクトは、session グローバルオブジェクトとして設定された既存のセッションオブジェクトを置き換えます。 置換されたセッションオブジェクトが最初に作成され、mysqlx 関数、mysql 関数または shell.openSession() のいずれかを使用して変数に割り当てられた場合、そのセッションオブジェクトは引き続き存在し、その接続は開いたままになります。 この接続は、最初に作成された MySQL Shell モードで引き続き使用でき、shell.setSession() を使用していつでも session グローバルオブジェクトに再度含めることができます。 置換されたセッションオブジェクトが shell.connect() メソッドで作成され、変数に割り当てられている場合も同様です。 置換されたセッションオブジェクトが、MySQL Shell の起動時、\connect コマンドの使用時、または shell.connect() メソッドの使用時に変数に割り当てずに作成された場合、その接続はクローズされ、再度使用する場合はセッションオブジェクトを再作成する必要があります。