I have a model that requires a stupid number of conditional statements. The older version was utilizing feature layers, select by attributes, and Calculate fields many, many times. I rewrote it to utilize a mass of nested if, elif, and else statements as well as a dictionary made from a search cursor from another feature class.
My problem is that I'm not quite sure where to place updateRow(row) statements so that the data is properly updated. The cursor updates a lot of different fields. Most of them are simple updates, but almost all still depend on various conditional statements. This question is for a single simple segment before the messiest parts.
I tried to simplify it as much as possible to show. I assign the age field within the cursor but also need to reference that same field (after its been assigned) to perform calculations. Do I need to update the row after each age or would the cursor.updateRow(row) line be placed after the age assignment and then a gain after the AgeMult assignments?
with arcpy.da.UpdateCursor(ci_masterpoints, flds) as cursor:
# start looking at rows
for row in cursor:
row[flds.index('TodaysDate')] = datetime.datetime.now().strftime('%d/%m/%Y')
row[flds.index('TodaysDateYr')] = datetime.datetime.now().year
age = row[flds.index('Age')]
# If the work order number matches to a wonum in conditions...
if mx_row in conditions:
row[flds.index('Leak_Location')] = conditions[mx_row]
# Avoid null values but assign year based on Actual_Finish
if row[flds.index('Actual_Finish')] != None:
# Assign the year to DateInstallYr
row[flds.index('DateInstallYr')] = row[flds.index('Actual_Finish')].year
age = row[flds.index('TodaysDateYr')] - row[flds.index('DateInstallYr')]
if age == None:
row[flds.index('AgeMult')] = 1
elif age > 10 and age < 20:
row[flds.index('AgeMult')] = 0.9
elif age > 20:
row[flds.index('AgeMult')] = 0.75