More

With arcpy, how do I detect relationship classes in a file GDB (or can't I)?

With arcpy, how do I detect relationship classes in a file GDB (or can't I)?


I would like to be able to detect relationship classes in a file GDB. Because users of my script might have only an ArcView level license, they would not be able to manipulate the schema of a feature class (specifically to add a field) that is in a workspace that has relationship classes. How do I detect the presence of relationship classes, so that I can document them, avoid them programatically, and allow the script to continue?


The relationshipClassNames property is supposed to do this but it does not seem to work for me (tested in a file geodatabase, created relationship class between two feature classes, checked the property, the list returned is empty for both). Maybe it will work for you.


As per @blah238 suggestion, this python code lists all relationship classes within a Geodatabase and put them in a unique list (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

I struggled with this until realizing arcpy sees relationship classes through the tables with which they are associated. Here's a little piece of code to check for relationship class names greater than length 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.'

I am at 10.5.1 and it looks like the relationshipClassNames is giving me the list of relationship class names like it supposed to

layer = "C:Geodatabasessomegeodatabase.gdbmy_layer" desc = arcpy.Describe(layer) print desc.relationshipClassNames

Watch the video: Access 2003 Expert - Εξαγωγή δεδομένων