7.2.3 Oracle Databaseへの接続

oml.connectを使用してオンプレミスOracleデータベースへのOML4Py接続を確立します。

oml.connect関数は、オンプレミスOracleデータベース内のユーザーのスキーマへの接続を確立します。

oml.connect関数の構文は次のとおりです。

oml.connect(user=None, password=None, host=None, port=None, sid=None,
service_name=None, dsn=None, encoding=’UTF-8’, nencoding=’UTF-8’, automl=None)

データベースへの基本的な接続を作成するには、次の相互に排他的な組合せでoml.connect関数の引数を指定できます。

  • userpassworddsn
  • userpasswordhostportsid
  • userpasswordhostportservice_name

引数では、次の値を指定します

表7-2 oml.connectのパラメータ

パラメータ 説明
user ユーザー名を指定する文字列。
password ユーザーのパスワードを指定する文字列。
host OML4Pyサーバーがインストールされているホスト・マシンの名前を指定する文字列。
port ホスト・マシンのOracleデータベース・ポート番号を指定するintまたは文字列。
sid Oracleデータベースのシステム識別子(SID)を指定する文字列。
service_name Oracleデータベースのサービス名を指定する文字列。
dsn データ・ソース名を指定する文字列。データベースのTNSエントリまたはOracleウォレットでのTNS別名を指定できます。
encoding 通常のデータベース文字列に使用するエンコーディングを指定する文字列。
nencoding 各国語文字セットのデータベース文字列に使用するエンコーディングを指定する文字列。
automl 自動機械学習(AutoML)接続を有効にするかどうかを指定する文字列またはブールで、データベース常駐接続プールを使用します。

ホスト、ポート、SID (またはサービス名)について実行されている接続プールがある場合は、そのホスト、ポート、SID (またはサービス名)およびautoml=Trueを指定できます。

dsn引数がデータ・ソース名である場合、automl引数は実行中の接続プールのデータ・ソース名である必要があります。

dsn引数がTNS別名である場合、automl引数はOracleウォレットで指定された接続プールのTNS別名である必要があります。

OML4PyのAutoML機能を使用するには、次を満たす必要があります。

  • サーバーで接続プールが実行されている必要があります。
  • サーバーで実行されている接続プールを指定するには、oml.connect呼出しでautoml引数を明示的に使用する必要があります。

ノート:

AutoML接続を作成するには、データベース管理者がまず、次のSQL文を発行して、オンプレミスOracleデータベースでデータベース常駐接続プールをアクティブにする必要があります。

EXECUTE DBMS_CONNECTION_POOL.START_POOL();

起動したら、データベース管理者が次のコマンドを発行して明示的に停止するまで、接続プールはこの状態のままです。

EXECUTE DBMS_CONNECTION_POOL.STOP_POOL();

アクティブなOML4Py接続がPythonセッション中に同時に存在できるのは、1つのみです。アクティブな接続がすでに存在するときにoml.connectをコールすると、oml.disconnect関数が暗黙的に呼び出され、前のセッションで作成した一時オブジェクトが破棄され、新しい接続が確立されます。接続を試みる前に、oml.isconnected関数を使用してアクティブな接続が存在するかどうかを把握できます。

oml.disconnect関数を使用して明示的に接続を終了します。oml.disconnectを呼び出さない場合は、Pythonセッションの終了時に接続が自動的に終了されます。

次の例では、oml.connect関数の一部の引数の値は、例で宣言されていない文字列変数です。次の例のいずれかを使用するには、ユーザー名、パスワード、ポートおよび可変引数値をユーザーおよびデータベースの値に置き換えます。

例7-1 ホスト、ポートおよびSIDによる接続

この例では、hostportおよびsid引数を使用します。また、oml.isconnectedoml.check_embedおよびoml.disconnect関数の使用も示しています。

import oml

oml.connect(user='oml_user', password='oml_user_password', host='myhost', 
            port=1521, sid='mysid')

# Verify that the connection exists.
oml.isconnected()

# Find out whether Embedded Python Execution is enabled in the 
# database instance.
oml.check_embed()

# Disconnect from the database.
oml.disconnect()

# Verify that the connection has been terminated.
oml.isconnected()

この例のリスト

>>> import oml
>>>
>>> oml.connect(user='oml_user', password='oml_user_password', host='myhost',
...             port=1521, sid='mysid')
>>> 
>>> # Verify that the connection exists.
... oml.isconnected()
True
>>>
>>> # Find out whether Embedded Python Execution is enabled in the 
... # database instance.
... oml.check_embed()
True
>>>
>>> # Disconnect from the database.
... oml.disconnect()
>>>
>>> # Verify that the connection has been terminated.
... oml.isconnected()
False

例7-2 ホスト、ポートおよびサービス名による接続

この例では、hostportおよびservice_name引数を使用します。

import oml

oml.connect(user='oml_user', password='oml_user_password', host='myhost',
            port=1521, service_name='myservice')

例7-3 SIDが含まれるDSNによる接続

この例では、dsn引数を使用してSIDを指定します。

import oml

mydsn = "(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=myhost)(PORT=1521))\
          (CONNECT_DATA=(SID=mysid)))"
oml.connect(user='oml_user', password='oml_user_password', dsn=mydsn)

例7-4 サービス名が含まれるDSNによる接続

この例では、dsn引数を使用してサービス名を指定します。

import oml

myinst = "(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=myhost)\
          (PORT=1521))\
          (CONNECT_DATA=(SERVICE_NAME=myservice.example.com)))"
oml.connect(user='oml_user', password='oml_user_password', dsn=myinst)

例7-5 DSNによる、AutoMLが有効になっている接続の作成

この例では、AutoMLが有効になっているOML4Py接続を作成します。この例では、ローカル・データベースに接続します。

import oml

mydsn = "(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=myhost)\
          (PORT=1521))(CONNECT_DATA=(SID=mysid)))"

dsn_pool = "(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=myhost)\
             (PORT=1521))\
             (CONNECT_DATA=(SERVICE_NAME=myservice.example.com)\
             (SERVER=POOLED)))"

oml.connect(user='oml_user', password='oml_user_password',
            dsn=mydsn, automl=dsn_pool)

# Verify that the connection exists and that AutoML is enabled.
oml.isconnected(check_automl=True)

例7-6 Oracleウォレットによる接続

この例では、dsn引数を使用してOracleウォレットを指定し、接続を作成します。dsn値(この例ではwaltcon)は、ウォレットで適切な資格証明を作成するために使用されたデータベースのtnsnames.oraファイル内の別名を参照する必要があります。

import oml

oml.connect(user='', password='', dsn='waltcon')

例7-7 Oracleウォレットによる、AutoMLが有効になっている接続

この例では、Oracleウォレットを使用して接続し、dsnおよびautoml引数を使用してAutoMLが有効になっている接続を確立します。この例では、接続でAutoMLが有効になっていることを確認します。dsnおよびautomlの値(この例ではwaltconおよびwaltcon_pool)は、ウォレットで適切な資格証明を作成するために使用されたデータベースのtnsnames.oraファイル内の別名を参照する必要があります。

import oml

oml.connect(user='', password='', dsn='waltcon', automl='waltcon_pool')
oml.isconnected(check_automl=True)