7.3.4 データベース・オブジェクトのPythonプロキシ・オブジェクトの作成

oml.sync関数を使用して、データベース表、ビューまたはSQL文のプロキシとしてPythonオブジェクトを作成します。

oml.sync関数は、oml.DataFrameオブジェクトまたはoml.DataFrameオブジェクトのディクショナリを返します。oml.syncによって返されるoml.DataFrameオブジェクトは、データベース・オブジェクトのプロキシです。

このプロキシoml.DataFrameオブジェクトを使用して、表からデータを選択できます。表からデータを選択するPython関数を実行すると、関数によってデータベース・オブジェクトから現在のデータが返されます。ただし、アプリケーションが表に列を追加したか、他の形でデータベース・オブジェクトのメタデータを変更した場合、そのデータベース・オブジェクトに対して再びoml.syncが呼び出されるまでoml.DataFrameプロキシ・オブジェクトにはそのような変更が反映されません。

ヒント:

メモリー・リソースおよび時間を節約するには、Pythonセッションで使用する表のプロキシのみを作成してください。

oml.dir関数を使用すると、スキーマの環境内のoml.DataFrameプロキシ・オブジェクトをリストできます。

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

oml.sync(schema=None, regex_match=False, table=None, view=None, query=None)

oml.syncschema引数は、データベース・オブジェクトが存在するスキーマの名前を指定します。schema=None (デフォルト)の場合は、現行スキーマが使用されます。

表についてoml.DataFrameオブジェクトを作成するには、tableパラメータを使用します。ビューについて作成するには、viewパラメータを使用します。SQL SELECT文について作成するには、queryパラメータを使用します。oml.syncの呼出しでは、これらのパラメータのいずれか1つのみを指定できます。パラメータのうちの1つの引数は文字列である必要があり、他の2つのパラメータそれぞれの引数はNoneである必要があります。

問合せのプロキシ・オブジェクトを作成すると、データベースにビューを作成せずにoml.DataFrameオブジェクトを作成できます。これは、現行スキーマに対してCREATE VIEWシステム権限を持っていない場合に有用です。schemaパラメータとqueryパラメータを同じore.syncの呼出しで使用することはできません。

regex_match引数を使用すると、tableまたはview引数の値が正規表現かどうかを指定できます。regex_match=Trueの場合、oml.syncは、パターンと一致するそれぞれのデータベース・オブジェクトについてoml.DataFrameオブジェクトを作成します。一致した表またはビューは、表名またはビュー名をキーとして使用するdictで返されます。

例7-10 データベース表のPythonオブジェクトの作成

この例では、データベース表のプロキシとしてoml.DataFrame Pythonオブジェクトを作成します。この例については、COFFEE表はユーザーのスキーマに存在します。

import oml

# Create the Python object oml_coffee as a proxy for the 
# database table COFFEE.
oml_coffee = oml.sync(table = 'COFFEE')
type(oml_coffee)

# List the proxy objects in the schema.
oml.dir()

oml_coffee.head()

この例のリスト

>>> import oml
>>>
>>> # Create the Python object oml_coffee as a proxy for the 
... # database table COFFEE.
... oml_coffee = oml.sync(table = 'COFFEE')
>>> type(oml_coffee)
<class 'oml.core.frame.DataFrame'>
>>>
>>> # List the proxy objects in the schema.
... oml.dir()
['oml_coffee']
>>>
>>> oml_coffee.head()
   ID COFFEE WINDOW
0   1    esp      w
1   2    cap      d
2   3    cap      w
3   4    kon      w
4   5    ice      w

例7-11 regex_match引数の使用

この例では、regex_match引数を使用して、名前がCで始まる表のoml.DataFrameプロキシ・オブジェクトを含むdictオブジェクトを作成します。この例については、COFFEE表とCOLOR表はユーザーのスキーマに存在し、名前がCで始まる表はこれらのみです。

# Create a dict of oml.DataFrame proxy objects for tables
# whose names start with 'C'.
oml_cdat = oml.sync(table="^C", regex_match=True)

oml_cdat.keys()
oml_cdat['COFFEE'].columns
oml_cdat['COLOR'].columns

この例のリスト

>>> # Create a dict of oml.DataFrame proxy objects for tables
... # whose names start with 'C'.
... oml_cdat = oml.sync(table="^C", regex_match=True)
>>>
>>> oml_cdat.keys()           
dict_keys(['COFFEE', 'COLOR']
>>> oml_cdat['COFFEE'].columns
['ID', 'COFFEE', 'WINDOW']
>>> oml_cdat['COLOR'].columns
['REGION', 'EYES', 'HAIR', 'COUNT']

例7-12 更新された表の同期

この例では、oml.syncを使用してデータベース表COFFEEのoml.DataFrameを作成します。この例については、oml.syncの最初の呼出し後に、他のデータベース・プロセスによって新しい列BREWがデータベース表に追加されています。oml.syncを再度呼び出すと、oml.DataFrameのメタデータが表のものと同期されます。

oml_coffee =  oml.sync(table = "COFFEE")
oml_coffee.columns

# After a new column has been inserted into the table.
oml_coffee =  oml.sync(table = "COFFEE")
oml_coffee.columns

この例のリスト

>>> oml_coffee =  oml.sync(table = "COFFEE")
>>> oml_coffee.columns
['ID', 'COFFEE', 'WINDOW']
>>>
>>> # After a new column has been inserted into the table.
... oml_coffee =  oml.sync(table = "COFFEE")
>>> oml_coffee.columns
['ID', 'COFFEE', 'WINDOW', 'BREW']