파일 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