I decided to completely restructure the code I was using for my ingest/QAQC script that I am building. I managed to get around using a table join for the first QA/QC part, but this part may require the join. Here's my code block.
def findRevisit(): #Looks for revisited in the incoming data set using table join and DT(date) field. Flags potential revisits with '2' in QAQC_FLAG field.
arcpy.env.workspace = inPGDB
rtTbl = "midFCviewJoin_vw"
leftTbl = in_table_view
joinField = "UUID"
dateField = "DT"
updField = "QAQC_FLAG"
fields = [joinField,dateField,updField]
leftDate = in_table + "." + dateField
rtDate = midFCview+ "." + dateField
arcpy.AddJoin_management(leftTbl,joinField,rtTbl,joinField)
## arcpy.JoinField_management(leftTbl,joinField,rtTbl,joinField,"")
sql = leftTbl + "." + joinField + " <> " + rtTbl + "." + joinField
print "SQL where clause: " + sql
with arcpy.da.UpdateCursor(leftTbl,[dateField,updField],sql) as cursor:
for rec in cursor:
rec[1]=2 ##Set QAQC flag = 2 for possible revisits in the incoming dataset
cursor.updateRow(rec)
print rec
## arcpy.DeleteField_management(in_table, "QAQC_FLAG_1")
arcpy.RemoveJoin_management(leftTbl)
return leftTbl,rtTbl,sql
del cursor,rec
Seems like it should run. Both table views are in the same workspace. It still falls on its face. Here is the error I get from the cursor:
Traceback (most recent call last):
File "C:/Users/kgaines/Documents/Aquadat/Scripting/AquaDat_tableCreate_findDup_findRevisit_defFunct.py", line 232, in <module>
main()
File "C:/Users/kgaines/Documents/Aquadat/Scripting/AquaDat_tableCreate_findDup_findRevisit_defFunct.py", line 225, in main
findRevisit()
File "C:/Users/kgaines/Documents/Aquadat/Scripting/AquaDat_tableCreate_findDup_findRevisit_defFunct.py", line 169, in findRevisit
for rec in cursor:
RuntimeError: Too few parameters. Expected 2.
Where is the "Too few parameters" error coming from?
Here are a couple of images showing the field names in the in_table. All of the other tables and views have exactly the same fields.
-
Try defining the the fields like this: "fields = [dateField,updField]" or more explicitly if you can as "fields = ['DT', 'QAQC_FLAG'] prior to calling it in UpdateCursor.cpt_python– cpt_python2017年01月11日 18:23:20 +00:00Commented Jan 11, 2017 at 18:23
-
Still gives the too few parameters error. I don't get it. This should work! Grrrr!!!!Ken Gaines– Ken Gaines2017年01月11日 18:27:40 +00:00Commented Jan 11, 2017 at 18:27
-
Are dateField and updField part of leftTbl? or are they part of rtTbl? If latter as I suspect, the problem is that after joining the tables the joins are not recognized by UpdateCursor, so that's why it is throwing an error saying that it requires two arguments. I think you want to save/export the joined table and then perform UpdateCursor.cpt_python– cpt_python2017年01月11日 18:38:39 +00:00Commented Jan 11, 2017 at 18:38
-
dateField and updField actually belong to both tables. The tables share a common field design. I am starting to think that the join isn't going to work in this form. I may have to use some other method to pull out the UUIDs of records that meet the search criteria and use those to update the master in_table before creating the XY layer and outFC.Ken Gaines– Ken Gaines2017年01月11日 20:52:37 +00:00Commented Jan 11, 2017 at 20:52
-
I think you need to to include UUID as a field in the UpdateCursor as well and double your SQL syntax as well. I'm including a modified script below. Hopefully that'll help.cpt_python– cpt_python2017年01月11日 21:25:33 +00:00Commented Jan 11, 2017 at 21:25
1 Answer 1
def findRevisit():
arcpy.env.workspace = inPGDB
r_Table = "midFCviewJoin_vw"
l_Table_view = in_table_view
arcpy.MakeTableView_management(r_Table, r_Table_view) #assuming that the left table is already 'table view'
#Joining Tables
arcpy.AddJoin_management(l_Table_view, "UUID", r_Table_view, "UUID")
#Create a table view out of joined tables
arcpy.MakeTableView_management(l_Table_view, joined_table)
fields = ["UUID", "DT", "QAQC_FLAG"]
sql = '"UUID" <> "UUID"'
#Here I assume you are saying: Change DT value to 2
with arcpy.da.UpdateCursor(joined_table, fields, sql) as cursor:
for rec in cursor:
rec[1] = 2 ##Set QAQC flag = 2 for possible revisits in the incoming dataset
cursor.updateRow(rec)
print rec
arcpy.RemoveJoin_management(joined_table)
return l_Table_view, r_Table_view, sql
del cursor, rec
Explore related questions
See similar questions with these tags.