I am working in an enterprise SDE database. I am working with a particular schema that contains tables, views and synonyms that have and have not been registered with the SDE and the Geodatabase. Ultimately, I am trying to retrieve domains that are being used in the schema, but I have ran into an issue along the way.
The schema contains database synonyms. I have found that arcpy.ListTables will return the database synonym, but arcpy.ListFields will not recognize the database synonym. I would like to exclude the synonyms from my process, but arcpy.ListTables does not provide a utility to filter the return set by object type (info and dbase do not work in this case).
Here is my specific example which I have abbreviated to highlight the issue. The MYSCHEMA.RESERVOIR object is a database synonym:
tableList = arcpy.ListTables() for table in tableList: if "MYSCHEMA." in table: if "RESERVOIR" in table: print table fieldList = arcpy.ListFields(table) ## code breaks here print "made it here" for field in fieldList: print table MYSCHEMA.RESERVOIR Traceback (most recent call last): File "<pyshell#71>", line 6, in <module> fieldList = arcpy.ListFields(table) File "C:\Program Files (x86)\ArcGIS\Desktop10.2\arcpy\arcpy\__init__.py", line 1119, in ListFields return gp.listFields(dataset, wild_card, field_type) File "C:\Program Files (x86)\ArcGIS\Desktop10.2\arcpy\arcpy\geoprocessing\_base.py", line 344, in listFields self._gp.ListFields(*gp_fixargs(args, True))) IOError: "MYSCHEMA.RESERVOIR" does not exist
So it appears that ListFields will not recognize a database synonym. Does anyone have any thoughts about how to filter out database synonyms before running arcpy.ListFields? I would prefer not to filter out the synonym objects by name, as these names could change and that would require someone to update the code.
Thanks in advance.