Skip to main content

グローバル参照 API

このセクションでは、InterSystems IRIS Python モジュールの gref クラスのメソッドの API ドキュメントを提供します。これらのメソッドにより、InterSystems IRIS グローバルにアクセスし、操作することができます。

概要

以下のテーブルに、InterSystems IRIS Python モジュールの gref クラスのメソッドの概要を示します。組み込み Python からこのクラスを使用するには、まず import iris を実行し、次に iris.gref() 関数を使用してグローバルへの参照を取得します。("iris.gref()" を参照してください。)

グループ 設定
グローバルのノードでの操作 data()get()getAsBytes()kill()set()
グローバルの検索 keys()order()orderiter()query()

グローバルに関する背景情報は、"グローバルの概要" を参照してください。

data(key)

グローバルのノードにデータが含まれるかどうか、および下位ノードがあるかどうかを確認します。ノードの key は、リストとして渡されます。値が None (または空のリスト) のキーを渡すことは、グローバルのルート・ノードを意味します。

データへのアクセスを試行してエラーが発生する前に、data() を使用して、データが含まれているかどうかノードを調べることができます。ノードが定義されていない (データが含まれていない) 場合、メソッドは 0 を返し、ノードが定義されている (データが含まれている) 場合は 1、ノードは定義されていないが下位ノードがある場合は 10、ノードが定義されていて下位ノードがある場合は 11 を返します。

以下の内容のグローバル ^a があるとします。

^a(2) = "two"
^a(3,1) = "three one"
^a(4) = "four"
^a(4,1) = "four one"

data() を使用して、以下の例のように、グローバルのさまざまなノードをテストできます。

>>> a = iris.gref('^a')
>>> a.data([1])
0
>>> a.data([2])
1
>>> a.data([3])
10
>>> a.data([4])
11
>>> a.data([None])
10
>>> a.data([3,1])
1

モジュロ 2 演算を使用すると、下位ノードがあるかどうかに関係なく、ノードにデータが含まれるかどうかを確認できます。

>>> a.data([3]) % 2
0
>>> a.data([4]) % 2
1

get(key)

グローバルのノードに格納されている値を取得します。ノードの key は、リストとして渡されます。値が None (または空のリスト) のキーを渡すことは、グローバルのルート・ノードを意味します。

以下の内容のグローバル ^a があるとします。

^a(2) = "two"
^a(3,1) = "three one"
^a(4) = "four"
^a(4,1) = "four one"

get() を使用して、以下の例のように、グローバルのさまざまなノードからデータを取得できます。

>>> a = iris.gref('^a')
>>> a.get([2])
'two'
>>> a.get([3,1])
'three one'

また、Python ディクショナリの場合と同様に、ノードの値を直接取得することもできます。dunder メソッド __getitem__() を使用することもできます。

>>> a[3,1]
'three one'
>>> a.__getitem__([3,1])
'three one'

get() を使用して定義されていないノードからデータを取得すると、エラーが発生します。

>>> a.get([5])
Traceback (most recent call last):
  File "<input>", line 1, in <module>
KeyError: 'Global Undefined'

データの取得を試行する前に、data() メソッドを使用して、ノードにデータが含まれているかどうかをテストできます。

定義されていないノードから直接、または __getitem__() を使用してデータを取得すると、エラーが発生する代わりに None が返されます。

>>> print(a[5])
None
>>> print(a.__getitem__([5]))
None

"getAsBytes()" も参照してください。

getAsBytes(key)

グローバルのノードに格納されている文字列値を取得して、Python の bytes データ型に変換します。ノードの key は、リストとして渡されます。値が None (または空のリスト) のキーを渡すことは、グローバルのルート・ノードを意味します。

以下の内容のグローバル ^a があるとします。

^a(2) = "two"
^a(3,1) = "three one"
^a(4) = "four"
^a(4,1) = "four one"

getAsBytes() を使用して、以下の例のように、グローバルのさまざまなノードからデータを取得できます。

>>> a = iris.gref('^a')
>>> a.getAsBytes([2])
b'two'
>>> a.getAsBytes([3,1])
b'three one'

getAsBytes() を使用して定義されていないノードからデータを取得すると、エラーが発生します。

>>> a.getAsBytes([5])
Traceback (most recent call last):
  File "<input>", line 1, in <module>
KeyError: 'Global Undefined'

データの取得を試行する前に、data() メソッドを使用して、ノードにデータが含まれているかどうかをテストできます。

"get()" も参照してください。

keys(key)

指定されたキーから始めて、グローバルのキーを返します。開始 key はリストとして渡されます。空のリストを渡すことは、グローバルのルート・ノードを意味します。

以下の内容のグローバル ^mlb があるとします。

^mlb = "Major League Baseball"
^mlb("AL") = "American League"
^mlb("AL","Central") = "AL Central"
^mlb("AL","East") = "AL East"
^mlb("AL","East",1) = "Baltimore"
^mlb("AL","East",2) = "Boston"
^mlb("AL","East",3) = "NY Yankees"
^mlb("AL","East",4) = "Tampa Bay"
^mlb("AL","East",5) = "Toronto"
^mlb("AL","West") = "AL West"
^mlb("AL","West",1) = "Houston"
^mlb("AL","West",2) = "LA Angels"
^mlb("AL","West",3) = "Oakland"
^mlb("AL","West",4) = "Seattle"
^mlb("AL","West",5) = "Texas"
^mlb("NL") = "National League"

以下のように、keys() を使用してグローバルのキーを取得し、その値を出力できます。

>>> m = iris.gref('^mlb')
>>> for key in m.keys([]):
...    value = m[key]
...    print(f'{key} = {value}')
...
['AL'] = American League
['AL', 'Central'] = AL Central
['AL', 'East'] = AL East
['AL', 'East', '1'] = Baltimore
['AL', 'East', '2'] = Boston
['AL', 'East', '3'] = NY Yankees
['AL', 'East', '4'] = Tampa Bay
['AL', 'East', '5'] = Toronto
['AL', 'West'] = AL West
['AL', 'West', '1'] = Houston
['AL', 'West', '2'] = LA Angels
['AL', 'West', '3'] = Oakland
['AL', 'West', '4'] = Seattle
['AL', 'West', '5'] = Texas
['NL'] = National League

開始キーがグローバルのノードとして存在する必要はありません。グローバルはソートされた順序で格納されるため、keys() はソート順序に従って次のノードのキーから始まります。以下に例を示します。

>>> m = iris.gref('^mlb')
>>> for key in m.keys(['AL','North']):
...    value = m[key]
...    print(f'{key} = {value}')
...
['AL', 'West'] = AL West
['AL', 'West', '1'] = Houston
['AL', 'West', '2'] = LA Angels
['AL', 'West', '3'] = Oakland
['AL', 'West', '4'] = Seattle
['AL', 'West', '5'] = Texas
['NL'] = National League

get() を使用して各ノードの値を取得することもできますが、まず data() を使用して各ノードをテストし、データが含まれていることを確認する必要があります。

order() を使用すると、グローバルの 1 つのレベルでノードが検索されます。

kill(key)

グローバルのノードを削除します (存在する場合)。ノードの key は、リストとして渡されます。この操作により、ノードの下位ノードも削除されます。値が None (または空のリスト) のキーを渡すことは、グローバルのルート・ノードを意味します。

以下の内容のグローバル ^a があるとします。

^a(2) = "two"
^a(3,1) = "three one"
^a(4) = "four"
^a(4,1) = "four one"

kill() を使用して、以下の例のように、グローバルのノードとその下位ノードを削除できます。

>>> a = iris.gref('^a')
>>> a.kill([4])

これで、グローバルの内容は以下のようになります。

^a(2) = "two"
^a(3,1) = "three one"

キーに None を渡すと、グローバル全体が削除されます。

>>> a.kill([None])

order(key)

指定されたキーから始めて、グローバルのそのレベルの次のキーを返します。開始 key はリストとして渡されます。開始キーに続くキーがない場合、order() は None を返します。

以下の内容のグローバル ^mlb があるとします。

^mlb = "Major League Baseball"
^mlb("AL") = "American League"
^mlb("AL","Central") = "AL Central"
^mlb("AL","East") = "AL East"
^mlb("AL","East",1) = "Baltimore"
^mlb("AL","East",2) = "Boston"
^mlb("AL","East",3) = "NY Yankees"
^mlb("AL","East",4) = "Tampa Bay"
^mlb("AL","East",5) = "Toronto"
^mlb("AL","West") = "AL West"
^mlb("AL","West",1) = "Houston"
^mlb("AL","West",2) = "LA Angels"
^mlb("AL","West",3) = "Oakland"
^mlb("AL","West",4) = "Seattle"
^mlb("AL","West",5) = "Texas"
^mlb("NL") = "National League"

order() を使用して、以下の例に示すように、指定されたキーの次のキーを取得できます。

>>> m = iris.gref('^mlb')
>>> m.order(['AL','Central'])
'East'
>>> m.order(['AL','East'])
'West'
>>> m.order(['AL','East',1])
'2'
>>> m.order(['AL','East',2])
'3'

開始キーがグローバルのノードとして存在する必要はありません。グローバルはソートされた順序で格納されるため、order() はソート順序に従って次のノードのキーを返します。以下に例を示します。

>>> m.order(['AL','West',3.5])
'4'

while ループを使用して、特定レベルでグローバルのノードを検索し、戻り値が None になると終了します。開始キーを空の文字列に設定することは、“そのレベルの最初から開始する” ことを意味します。

以下の例では、グローバルの最上位のノードを検索します。

>>> m = iris.gref('^mlb')
>>> key = ""
>>> while True:
...    key = m.order([key])
...    if key == None:
...       break
...    print(m[key])
...
American League
National League

以下の例では、グローバルの 3 番目のレベルのノードを検索します。

>>> m = iris.gref('^mlb')
>>> key = ""
>>> while True:
...    key = m.order(['AL','East',key])
...    if key == None:
...       break
...    print(m['AL','East',key])
...
Baltimore
Boston
NY Yankees
Tampa Bay
Toronto

必要に応じて while ループを入れ子にしたり、keys() または query() を使用してグローバル全体を検索できます。

orderiter(key)

指定されたキーから始めて次のリーフ・ノードまで、グローバルのキーと値を返します。開始 key はリストとして渡されます。空のリストを渡すことは、グローバルのルート・ノードを意味します。

以下の内容のグローバル ^mlb があるとします。

^mlb = "Major League Baseball"
^mlb("AL") = "American League"
^mlb("AL","Central") = "AL Central"
^mlb("AL","East") = "AL East"
^mlb("AL","East",1) = "Baltimore"
^mlb("AL","East",2) = "Boston"
^mlb("AL","East",3) = "NY Yankees"
^mlb("AL","East",4) = "Tampa Bay"
^mlb("AL","East",5) = "Toronto"
^mlb("AL","West") = "AL West"
^mlb("AL","West",1) = "Houston"
^mlb("AL","West",2) = "LA Angels"
^mlb("AL","West",3) = "Oakland"
^mlb("AL","West",4) = "Seattle"
^mlb("AL","West",5) = "Texas"
^mlb("NL") = "National League"

以下の例は、orderiter() を使用し、ルートから始めて次のリーフ・ノードまで、グローバルを検索します。

>>> m = iris.gref('^mlb')
>>> for (key, value) in m.orderiter([]):
...    print(f'{key} = {value}')
...
['AL'] = American League
['AL', 'Central'] = AL Central

開始キーがグローバルのノードとして存在する必要はありません。グローバルはソートされた順序で格納されるため、orderiter() はソート順序に従って次のノードを探します。以下に例を示します。

>>> m = iris.gref('^mlb')
>>> for (key, value) in m.orderiter(['AL','North']):
...    print(f'{key} = {value}')
...
['AL', 'West'] = AL West
['AL', 'West', '1'] = Houston

query(key)

指定されたキーから始めてグローバルを検索し、各キーと値を返します。開始 key はリストとして渡されます。空のリストを渡すことは、グローバルのルート・ノードを意味します。

以下の内容のグローバル ^mlb があるとします。

^mlb = "Major League Baseball"
^mlb("AL") = "American League"
^mlb("AL","Central") = "AL Central"
^mlb("AL","East") = "AL East"
^mlb("AL","East",1) = "Baltimore"
^mlb("AL","East",2) = "Boston"
^mlb("AL","East",3) = "NY Yankees"
^mlb("AL","East",4) = "Tampa Bay"
^mlb("AL","East",5) = "Toronto"
^mlb("AL","West") = "AL West"
^mlb("AL","West",1) = "Houston"
^mlb("AL","West",2) = "LA Angels"
^mlb("AL","West",3) = "Oakland"
^mlb("AL","West",4) = "Seattle"
^mlb("AL","West",5) = "Texas"
^mlb("NL") = "National League"

以下の例は、query() を使用し、ルートから始めてグローバルを検索します。

>>> m = iris.gref('^mlb')
>>> for (key, value) in m.query([]):
...    print(f'{key} = {value}')
...
['AL'] = American League
['AL', 'Central'] = AL Central
['AL', 'East'] = AL East
['AL', 'East', '1'] = Baltimore
['AL', 'East', '2'] = Boston
['AL', 'East', '3'] = NY Yankees
['AL', 'East', '4'] = Tampa Bay
['AL', 'East', '5'] = Toronto
['AL', 'West'] = AL West
['AL', 'West', '1'] = Houston
['AL', 'West', '2'] = LA Angels
['AL', 'West', '3'] = Oakland
['AL', 'West', '4'] = Seattle
['AL', 'West', '5'] = Texas
['NL'] = National League

開始キーがグローバルのノードとして存在する必要はありません。グローバルはソートされた順序で格納されるため、query() はソート順序に従って次のノードを探します。以下に例を示します。

>>> m = iris.gref('^mlb')
>>> for (key, value) in m.query(['AL','North']):
...    print(f'{key} = {value}')
...
['AL', 'West'] = AL West
['AL', 'West', '1'] = Houston
['AL', 'West', '2'] = LA Angels
['AL', 'West', '3'] = Oakland
['AL', 'West', '4'] = Seattle
['AL', 'West', '5'] = Texas
['NL'] = National League

set(key, value)

グローバルのノードを指定された値に設定します。ノードの key はリストとして渡され、value は格納される値です。値が None (または空のリスト) のキーを渡すことは、グローバルのルート・ノードを意味します。

以下の例は、グローバル ^messages への参照を取得し、set() を使用してグローバルのいくつかのノードの値を設定します。

>>> msg = iris.gref('^messages')
>>> msg.set([None], 'list of messages')
>>> msg.set(['greeting',1], 'hello')
>>> msg.set(['greeting',2], 'goodbye')

グローバル ^messages がまだ存在しない場合、以下のようになります。

^messages = "list of messages"
^messages("greeting",1) = "hello"
^messages("greeting",2) = "goodbye"

^messages が既に存在する場合、グローバルに新しい値が追加され、それらのノードの既存のデータは上書きされる可能性があります。設定を試行する前に、data() メソッドを使用して、ノードにデータが既に含まれているかどうかをテストできます。

以下の例のように、Python ディクショナリの場合と同様に、グローバル・ノードを直接設定することもできます。

>>> msg = iris.gref('^messages')
>>> msg['greeting',3] = 'aloha'

これで、グローバル ^messages は以下のようになります。

^messages = "list of messages"
^messages("greeting",1) = "hello"
^messages("greeting",2) = "goodbye"
^messages("greeting",3)="aloha"
FeedbackOpens in a new tab