arcpy를 사용하면 파일 GDB에서 관계 클래스를 어떻게 감지합니까? 싶습니다. 내

파일 GDB에서 관계 클래스를 감지하고 싶습니다. 내 스크립트 사용자는 ArcView 레벨 라이센스 만 가질 수 있으므로 관계 클래스가있는 작업 공간에있는 피처 클래스 (특히 필드 추가)의 스키마를 조작 할 수 없습니다. 관계 클래스의 존재를 감지하여이를 문서화하고 프로그래밍 방식으로 피하고 스크립트를 계속할 수 있도록하려면 어떻게해야합니까?



답변

relationshipClassNames속성이되는 가정 이 일을하지만 나를 위해 작동하지 않는 것 (파일 지오 데이터베이스에서 테스트,이 개 기능 클래스 사이에 관계 클래스, 속성을 확인, 반환 된 목록이 모두 비어 있습니다). 아마 당신을 위해 일할 것입니다.


답변

@ blah238 제안에 따라이 파이썬 코드는 지오 데이터베이스의 모든 관계 클래스를 나열하고 고유 목록 (relClasses)에 넣습니다.

inGDB = r"D:\mygeodatabase.gdb"
env.workspace = inGDB
#################Getting all Tables and Feature Classes###########
fcs = []
#root of workspace
for item in arcpy.ListFeatureClasses("*"):    fcs.append(item)
for item in arcpy.ListTables("*"):    fcs.append(item)

fds = arcpy.ListDatasets("*","Feature")
for fd in fds:
    env.workspace = inGDB +'\\'+fd
    for fc in arcpy.ListFeatureClasses("*"):
        fcs.append(fd+'/'+fc)
    for tb in arcpy.ListTables("*"):
        fcs.append(fd+'/'+tb)

env.workspace = inGDB
relClasses = set()
for i,fc in enumerate(fcs):
    desc = arcpy.Describe(fc)
    for j,rel in enumerate(desc.relationshipClassNames):
        relDesc = arcpy.Describe(rel)
        if relDesc.isAttachmentRelationship:
            continue
        relClasses.add(rel)

print relClasses


답변

나는 arcpy가 관계형 테이블을 통해 관계 클래스를 볼 때 까지이 문제로 어려움을 겪었습니다. 길이가 30보다 큰 관계 클래스 이름을 확인하는 코드는 다음과 같습니다.

arcpy.env.workspace = 'C:/workspace'

# Local variables
tables = arcpy.ListTables()

# Iterate through tables in file geodatabase (workspace)
for t in tables:
    # Get relationship class(es) associated with table
    desc = arcpy.Describe(t)
    rcs = desc.relationshipClassNames
# Iterate through any relationship classes associated with current table in loop
    for r in rcs:
        if len(r) > 30:
            print 'Relationship class ' + r + ' has ' + str(len(r)) + ' characters.'


답변

나는 10.5.1에 ​​있고 relationClassNames 가 나와 같은 관계 클래스 이름 목록을 제공 하는 것처럼 보입니다.

layer = "C:\\Geodatabases\\somegeodatabase.gdb\\my_layer"
desc = arcpy.Describe(layer)
print desc.relationshipClassNames


답변