OK, so if we get rid of the "*" as field list it would look something like this. Please note that the code has not been tested on any data.
import arcpy
def createMatchingFieldList(fc1, fc2):
lst1 = [fld.name for fld in arcpy.ListFields(fc1)]
lst2 = [fld.name for fld in arcpy.ListFields(fc2)]
return list(set(lst1) & set(lst2))
def createWhereClause(fc, fld_name, value):
if len(arcpy.ListFields(fc, fld_name)) == 1:
fld = arcpy.ListFields(fc, fld_name)[0]
if fld.type == "String":
where = "{0} = '{1}'".format(arcpy.AddFieldDelimiters(fc, fld_name), value)
else:
where = "{0} = {1}".format(arcpy.AddFieldDelimiters(fc, fld_name), value)
return where
def getPrimaryFieldValues(fc, field):
return [r[0] for r in arcpy.da.SearchCursor(fc, [field])]
def getSelectCursor(fc, flds, whereClause):
return arcpy.da.SearchCursor(fc, flds, whereClause)
def diff(a, b):
return list(set(a) - set(b))
#source = arcpy.GetParameterAsText(0)
#destination = arcpy.GetParameterAsText(1)
#fieldName = arcpy.GetParameterAsText(2)
source = r"C:\tempdelete\PL_TO_LINE.gdb\PL\VERT_TO_POINIT"
destination = r"C:\tempdelete\PL_TO_LINE.gdb\PL\VERT_TO_POINIT_DEST"
fieldName = "ROUTE_LINK_NO"
# create a list of field names which are in both featureclasses
flds = createMatchingFieldList(source, destination)
sourceValues = getPrimaryFieldValues(source, fieldName)
destinationValues = getPrimaryFieldValues(destination, fieldName)
additions = diff(sourceValues, destinationValues)
deletions = diff(destinationValues, sourceValues)
with arcpy.da.InsertCursor(destination, flds) as insertCursor:
for a in additions:
where = createWhereClause(source, fieldName, a)
insertRows = getSelectCursor(source, flds, where)
for r in insertRows:
insertCursor.insertRow(r)
for d in deletions:
where = createWhereClause(destination, fieldName, d)
with arcpy.da.UpdateCursor(destination, flds, where) as deleteCursor:
for d in deleteCursor:
deleteCursor.deleteRow()