サマリー
リレーションシップ クラスに定義された関連元と関連先のフィーチャクラスまたはテーブルのリレーションシップに基づいて関連レコードを取得します。
オブジェクトはタプルの反復子を返します。 各タプルには 2 つのアイテムが含まれます。1 つ目のアイテムは関連元テーブルの行 (タプル)、2 つ目のアイテムは関連先テーブルの行 (タプル) です。
説明
SearchRelatedRecords クラスは、for ループを使用して反復処理できます。 レコードが得られる順序は、oids_to_search パラメーターに渡された ObjectID 値の順序と一致しない場合があります。 SearchRelatedRecords オブジェクトは、データ ロックの削除に役立つ with ステートメントもサポートしています。
各テーブルから返される正確なフィールドは、origin_fields パラメーターと destination_fields パラメーターで制御できます。 origin_fields または destination_fields のいずれかを個別に省略することもできますが、どちらか 1 つは引数に指定する必要があります。 これらのパラメーターのいずれかを引数に指定しない場合、もう一方のパラメーターを引数に指定する必要があります。
関連元と関連先のフィーチャクラス Geometry オブジェクト プロパティには、それぞれのフィールドのリストに SHAPE@ トークンを指定することでアクセスできます。 ただし、SHAPE@ トークンを使用して完全なジオメトリにアクセスする操作は、計算上の負荷がかかります。 ポイントの X、Y 座標など、単純なジオメトリ情報のみが必要な場合は、SHAPE@XY、SHAPE@Z、SHAPE@M などのトークンを使用すると、より高速で効率的なアクセスが実現します。
デフォルトでは、リレーションシップは正方向に読み取られます。 このため、指定した ObjectID 値は関連元テーブルに適用され、関連先テーブルで関連レコードを検索するために使用されます。 方向を反転するには、backward パラメーターを True に設定します。 設定すると、指定した ObjectID 値は関連先テーブルに適用され、関連元テーブルで関連レコードを検索するために使用されるようになります。
指定した ObjectID 値の関連レコードが見つからない場合、そのレコードに対する結果は得られません。
構文
SearchRelatedRecords (relationship_class, {oids_to_search}, {origin_fields}, {destination_fields}, {backward})
パラメーター | 説明 | データ タイプ |
relationship_class | The path to the relationship class. | String |
oids_to_search [oids_to_search,...] | A list of ObjectID values that will be used to search for related records. Use an asterisk (*) instead of a list of ObjectID values to search for all related records. (デフォルト値は次のとおりです "*") | Integer |
origin_fields [origin_fields,...] | フィールド名のリスト (またはタプル)。 単一フィールドの場合、文字列のリストの代わりに文字列を使用できます。 フィールドのリストの代わりにアスタリスク (*) を使用すると、入力テーブルのすべてのフィールドにアクセスできます (BLOB フィールドは除きます)。 ただし、パフォーマンスとフィールドの順序の信頼性を高めるために、フィールドのリストは実際に必要なフィールドのみに絞り込むことをお勧めします。 その他の情報には、フィールド名の代わりにトークン (OID@ など) を使用してアクセスできます。 If no argument is passed to origin_fields, you must pass an argument to destination_fields.
(デフォルト値は次のとおりです None) | String |
destination_fields [destination_fields,...] | フィールド名のリスト (またはタプル)。 単一フィールドの場合、文字列のリストの代わりに文字列を使用できます。 フィールドのリストの代わりにアスタリスク (*) を使用すると、入力テーブルのすべてのフィールドにアクセスできます (BLOB フィールドは除きます)。 ただし、パフォーマンスとフィールドの順序の信頼性を高めるために、フィールドのリストは実際に必要なフィールドのみに絞り込むことをお勧めします。 その他の情報には、フィールド名の代わりにトークン (OID@ など) を使用してアクセスできます。 If no argument is passed to destination_fields, you must pass an argument to origin_fields.
(デフォルト値は次のとおりです None) | String |
backward | The directionality of the related record search. Set to False to search the relationship from the origin table to the destination table. Set to True to search the relationship from the destination table to the origin table. (デフォルト値は次のとおりです False) | Boolean |
方法の概要
方法 | 説明 |
reset () | Resets the iteration back to the first row. |
方法
reset ()
コードのサンプル
SearchRelatedRecords クラスを使用して、一連のパーセルに関連するすべての建物を検索します。
import arcpy
relc = os.path.join(arcpy.env.workspace, "Parcel_Building_Rel")
oids = [2710, 1010]
with arcpy.da.SearchRelatedRecords(relc, oids, origin_fields="APN", destination_fields="BUILDING_NUMBER") as related_records:
for record in related_records:
print(record)
SearchRelatedRecords クラスを逆方向に使用して、一連の建物に関連するパーセルを検索します
import arcpy
relc = os.path.join(arcpy.env.workspace, "Parcel_Building_Rel")
oids = [850, 921, 1018, 2301]
with arcpy.da.SearchRelatedRecords(relc, oids, origin_fields="APN", destination_fields="BUILDING_NUMBER", backward=True) as related_records:
for record in related_records:
print(record)
SearchRelatedRecords クラスを使用し、トークンを使って属性を取得します。 この例は、いずれかのフィールド パラメーターを省略することで、関連レコードにのみ注目している場合に役立つ場合があることも示しています。
import arcpy
relc = os.path.join(arcpy.env.workspace, "Parcel_Building_Rel")
oids = [2710]
with arcpy.da.SearchRelatedRecords(relc, oids, destination_fields=["OID@", "SHAPE@AREA"]) as related_records:
for record in related_records:
print(record)
Python sorted 関数を使用して、SearchRelatedRecords が返すレコードを並べ替えます。 この例では、また oids_to_search パラメーターを省略することで、SearchRelatedRecords クラスがすべての関連レコードを返すことを示しています。
import arcpy
relc = os.path.join(arcpy.env.workspace, "Parcel_Building_Rel")
for record in sorted(arcpy.da.SearchRelatedRecords(relc, origin_fields="APN", destination_fields=["BUILDING_NUMBER", "POPULATION"])):
print(record)