2.3 使い慣れたPython関数および構文を使用したデータベース表およびビューの操作

透過層クラスを使用すると、使い慣れたPython関数および構文を使用して、データベース表およびビューを操作できます。たとえば、データベース・データにマップするDataFrameプロキシ・オブジェクトを使用すると、高パフォーマンスのコンピュート・エンジンとしてデータベースを使用して、データベースで実行されるSQLを透過的に生成するオーバーロードされたPandas関数を呼び出せます。

OML4Py透過層は、次のことを行います。

  • pandas.DataFrameから表およびビューを作成し、プロキシ・オブジェクトを表およびビューに取得できるようにする。

  • 機能を透過的にSQLに変換する特定のPython関数をオーバーロードする

  • データベース・データにプロキシ・オブジェクトを利用する

  • 使い慣れたPython構文を使用してデータベース・データを操作する

次の表に、プロキシ・オブジェクトおよび表/ビューを取得および作成するための透過層関数を示します。

表2-1 プロキシ・オブジェクトおよび表/ビューを取得および作成するための透過層関数

関数 説明
oml.create

Pythonデータセットからデータベース・スキーマに表を作成します。

oml_object.pull

omlオブジェクトによって参照されるデータベース・オブジェクトからフェッチされるデータのコピーを含む、ローカルPythonオブジェクトを作成します。

oml.push

Pythonセッションからデータベース・スキーマ内のオブジェクトにデータをプッシュします。

oml.sync

データベース表またはビューを表すDataFrameプロキシ・オブジェクトをPythonに作成します。

oml.dir

Pythonセッション・ワークスペース内のomlオブジェクトの名前を返します。

oml.drop

永続データベースの表またはビューを削除します。

透過層プロキシ・クラスは、SQLデータ型またはオブジェクトを対応するPython型にマップします。これらのクラスは、マップされたPython型のものと同じPython関数および演算子を提供します。次の表は、透過層データ型クラスのリストです。

表2-2 透過層データ型クラス

クラス 説明
oml.Boolean

データベース・データ内の0、1およびNULL値の単一列を表すブール系列データ・クラス。

oml.Bytes

RAWまたはBLOBデータベース・データ型の単一列を表すバイナリ系列データ・クラス。

oml.Float

NUMBERBINARY_DOUBLEまたはBINARY_FLOATデータベース・データ型の単一列を表す数値系列データ・クラス。

oml.String

VARCHAR2CHARまたはCLOBデータベース・データ型の単一列を表す文字系列データ・クラス。

oml.DataFrame

oml.Booleanoml.Bytesoml.Floatおよびoml.Stringデータの複数の列を表す表形式のDataFrameクラス。

oml.Integer データベース内のNUMBER(*,0)データの単一列を表すデータ・クラス。
oml.Datetime

Oracle DatabaseのTIMESTAMPまたはTIMESTAMP WITH TIME ZONEの単一列を表す系列日付クラス。oml.Timezone TIME STAMP WITH TIME ZONEをサポートするためにoml.Datetimeとともに使用される時間クラス。oml.Timedelta 2つの日付または時間の間の差異、またはOracle DatabaseのINTERVAL DAY TO SECONDの単一列の系列を表す時間クラス。

oml.Timezone TIME STAMP WITH TIME ZONEをサポートするためにoml.Datetimeとともに使用される時間クラス。
oml.Timedelta 2つの日付または時間の間の差異、またはOracle DatabaseのINTERVAL DAY TO SECONDの単一列の系列を表す時間クラス。

次の表に、Pythonとデータベースの間のデータの読取りと書込みの両方に関するPythonデータ型の対応付けを示します。

表2-3 Pythonデータ型とSQLデータ型の対応付け

データベース読取り Pythonデータ型 データベース書込み

該当なし

Bool

oranumber == Trueの場合はNUMBER (デフォルト)、それ以外の場合はBINARY_DOUBLE

BLOB

RAW

bytes

BLOB

RAW

BINARY_DOUBLE

BINARY_FLOAT

NUMBER

float

oranumber == Trueの場合はNUMBER (デフォルト)、それ以外の場合はBINARY_DOUBLE

CHAR

CLOB

VARCHAR2

str

CHAR

CLOB

VARCHAR2

NUMBER(*,0) int NUMBER(*,0)
TIMESTAMPまたはTIMESTAMP WITH TIME ZONE datetime.datetime TIMESTAMPまたはTIMESTAMP WITH TIME ZONE
TIMESTAMPWITHTIMEZONE datetime.timezone TIMESTAMPWITHTIMEZONE
INTERVALDAYTOSECOND datetime.timedelta INTERVALDAYTOSECOND