cursor = arcpy.SearchCursor(tablepath)
# testbug.py import arcinfo import arcpy import sys def main(): ## global mosaicDb ## global pathtable # only a geoprocessing service can do this: # pathtable = '%SCRATCHWORKSPACE%/Scratch.gdb/Paths' # Desktop equivalent 9.3+ installTemp = arcpy.GetSystemEnvironment("ARCTEMPDIR") arcpy.env.scratchWorkspace = installTemp+"/scratch.gdb" if not arcpy.Exists(arcpy.env.scratchWorkspace): print "failed to set scratch workspace" sys.exit() pathtable = arcpy.env.scratchWorkspace +"/Paths" print pathtable mosaicDb = r'D:\data\aerial\catalog\nzmgcat.gdb' # '//sdm7/arcgis/Mosaics/imagery_datasets.gdb/' ## inputmosaic = arcpy.GetParameterAsText(0) ## objectid = arcpy.GetParameterAsText(1) inputmosaic = 'nztm1' objectid = '40' arcpy.AddMessage('Input Mosaic Dataset: ' + mosaicDb + "/" + inputmosaic) # bug fix added separator arcpy.AddMessage('Search SourceObjectID: ' + objectid) print 'Input Mosaic Dataset: ' + mosaicDb + "/" + inputmosaic print 'Search SourceObjectID: ' + objectid deletePathDb(pathtable) exportCatalog(inputmosaic,pathtable,mosaicDb) fs = getMosaicRow(objectid, pathtable) print fs arcpy.SetParameter(3, fs) # Not 0, this would have to be at least the third parameter def deletePathDb(pathtable): try: if arcpy.Exists(pathtable): arcpy.Delete_management(pathtable) arcpy.AddMessage('table deleted successfully') print 'pathtable deleted successfully' else : print 'pathtable does not exist' except: #catch because will throw error if table not there print "error in deletePathDb" arcpy.AddMessage('Error attempting delete path table') arcpy.AddMessage(arcpy.GetMessages()) def exportCatalog(name,pathtable,mosaicDb): try: fullname = mosaicDb + '/' + name arcpy.ExportRasterCatalogPaths_management(fullname, "ALL", pathtable) except Exception as e: arcpy.AddMessage("Error export catalog") arcpy.AddMessage(arcpy.GetMessages()) def getMosaicRow(objectId, table): where = 'SourceOID = ' + objectId # this is my objectid field name #this was line that explodes cursor = arcpy.SearchCursor(table, where) fs = None for row in cursor: # fs = row # this will be a geoprocessing row object of no value outside the cursor sPath = row.path nSourceOID = row.SourceOID nOID = row.OID del cursor return (nOID,nSourceOID,sPath)# return a tuple which contains the field contents if __name__ == '__main__': main()
c:\workspace/scratch.gdb/Paths Input Mosaic Dataset: \data\aerial\catalog\nzmgcat.gdb/nztm1 Search SourceObjectID: 40 pathtable deleted successfully (40, 40, u'D:\\data\\aerial\\catalog\\test\\r12a.jpg')
I am suspicious of your query to open the cursor. Is ObjectID a string? If not it needs to be cast to a string.What happens if the result is no records?Add some print statements to print out what is returned.I have never used the row variable in a cursor, always row.attribute, what does row return?Update and Insert cursors work differently and since you haven't added a new row it probably just does nothing.You also need to close the cursor but I suppose that you are relying on the local variables in the function. I would still explicitly 'del cursor'You may have more success by rearranging your whole script. I would avoid opening and reopening a cursor just to get one record.Maybe get all the values in one pass and put into a python dictionary? That would be much faster.
cursor = arcpy.SearchCursor(table, where)
import arcinfo import arcpy import sys def main(): global mosaicDb global pathtable pathtable = '%SCRATCHWORKSPACE%/Scratch.gdb/Paths' mosaicDb = '//sdm7/arcgis/Mosaics/imagery_datasets.gdb/' inputmosaic = arcpy.GetParameterAsText(0) objectid = arcpy.GetParameterAsText(1) arcpy.AddMessage('Input Mosaic Dataset: ' + mosaicDb + inputmosaic) arcpy.AddMessage('Search SourceObjectID: ' + objectid) deletePathDb() exportCatalog(inputmosaic) fs = getMosaicRow(objectid, pathtable) arcpy.SetParameter(0, fs) def deletePathDb(): try: arcpy.Delete_management(pathtable) arcpy.AddMessage('table deleted successfully') except: #catch because will throw error if table not there arcpy.AddMessage('Error attempting delete path table') arcpy.AddMessage(arcpy.GetMessages()) def exportCatalog(name): try: fullname = '//sdm7/arcgis/Mosaics/imagery_datasets.gdb/' + name arcpy.ExportRasterCatalogPaths_management(fullname, "ALL", pathtable) except Exception as e: arcpy.AddMessage("Error export catalog") arcpy.AddMessage(arcpy.GetMessages()) def getMosaicRow(objectId, table): where = 'SourceOID = ' + objectId #this is line that explodes cursor = arcpy.SearchCursor(table, where) fs = None for row in cursor: fs = row return fs
Aangemelde leden kunnen berichten plaatsen, updates volgen en meer. Nieuw hier? Registreer een gratis account.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.