I would like to base my query on the last row of a table? I know the basic syntax/functionality for my search cursor, how do I query only the last row;
Below is an example of my search criteria, this data comes from a log of success/fail for a script that runs, I will base other decisions off of the success or fail later in the application.
How do I add to my existing code the function to look in the last row, to getValue
of time
and success
or fail
I am using ArcGIS 10.2.
cursor = arcpy.SearchCursor(aTable,"""Time > DATEADD(minute, -2, GETDATE())""")
for row in cursor:
print(row.getValue("Time"))
if row.getValue("Time") < datetime.datetime.now().strftime('%m/%d/%Y %H:%M:%S'):
print "true"
else:
print "false"
This is later implemented in the script and creates the success
or fail
values as yes
and no
respectively.
rows = arcpy.InsertCursor(aTable)
for x in xrange(0, outputobjects):
row = rows.newRow()
row.setValue("Success", 'YES')
row.setValue("Fail", 'NO')
row.setValue("Time", Start)
rows.insertRow(row)
Answer
I would usually suggest the da.SearchCursor as well, but its order by clause only works withe data in a database. So, if it is in a database:
a_table = "YourTable"
order_fld = "Time"
return_flds = ["Time", "SomeOtherField"]
where_str = """Time > DATEADD(minute, -2, GETDATE())"""
sql_clause = (None,'ORDER BY {} DESC'.format(order_fld))
last_row = ''
last_time = ''
with arcpy.da.SearchCursor(a_table, return_flds, where_clause=where_str, sql_clause=sql_clause) as cursor:
last_row = cursor.next()
last_time = last_row[0]
Else, if it is a shapefile:
sort_string = "{} D".format(order_fld)
arcpy.SearchCursor(a_table, where_clause=where_str, sort_fields=sort_string)
last_row = cursor.next()
last_time = last_row.Time
Both of these, you don't have to loop through the entire result to get the "last" row. By ordering by descending, the last row is the 1st row, and you can move on.
No comments:
Post a Comment