I'm on ArcGIS 10.2.2 and trying to use arcpy.da.Editor and an InserCursor on a versioned feature class. The feature class was registered without the option to move edits to base and resides in a 10.0 SDE on Oracle 11g (will be 10.2.2 SDE soon).
I found this helpful post by Leslie Morgan that really details my same situation, but there are no code samples. I would like to know if any of you have used the Python Editor in a similar setup and what your code looks like. More specifically, can the Editor class be used in a with statement like the Esri help article says or do I still have to start and stop the operation and edit session like users say?
Here is the basic way I'm using the Editor for now until I find a better way.
try: edit = arcpy.da.Editor(sdeconnection) print "edit created" edit.startEditing() print "edit started" edit.startOperation() print "operation started" # Perform edits with arcpy.da.InsertCursor(fc, fields) as fc_icursor: fc_icursor.insertRow(someNewRow) edit.stopOperation() print "operation stopped" edit.stopEditing(True) ## Stop the edit session with True to save the changes print "edit stopped" except Exception as err: print err if 'edit' in locals(): if edit.isEditing: edit.stopOperation() print "operation stopped in except" edit.stopEditing(False) ## Stop the edit session with False to abandon the changes print "edit stopped in except" finally: # Cleanup arcpy.ClearWorkspaceCache_management()
Revisiting this, I've simplified the code a little by creating the edit session outside the try...except so you don't have to check if it exists.
edit = arcpy.da.Editor(sdeconnection)
print "edit created"
try:
edit.startEditing()
print "edit started"
edit.startOperation()
print "operation started"
# Perform edits
with arcpy.da.InsertCursor(fc, fields) as fc_icursor:
fc_icursor.insertRow(someNewRow)
edit.stopOperation()
print "operation stopped"
edit.stopEditing(True) ## Stop the edit session with True to save the changes
print "edit stopped"
except Exception as err:
print err
if edit.isEditing:
edit.stopOperation()
print "operation stopped in except"
edit.stopEditing(False) ## Stop the edit session with False to abandon the changes
print "edit stopped in except"
finally:
# Cleanup
arcpy.ClearWorkspaceCache_management()
Thanks Blake, that's a lot better and clear than the example in ESRI's doc.
Does anyone have a an ArcPro 3.0 solution on this?? We are using the code above but running arcpy.da.UpdateCursor in stead of InsertCursor. In debug on the arcpy.da.UpdateCursorline we get the error "cannot update the table". Thx
Did you set the right booleans for your data?:
Both are defaulted to True, and the second parameter is should be False if your data isnt versioned.
startEditing ({with_undo}, {multiuser_mode})
# Edit session is started without an undo/redo stack for versioned data # (for second argument, use False for unversioned data) edit.startEditing(False, True)
Yes we are trying to write to an SQL SDE database. We have set the edit to edit.startEditing(False, True). Thx