Is there a geoprocessing tool for inserting a new row into a standalone table?
For example, in model builder, I want to add a new row to this non-spatial table:
ArcGIS Pro 3.0.3
Thanks.
As Dan said, there's no out of the box tool. If you need that functionality in Model Builder, you have to create that tool yourself.
Below are two quick examples. You can save that script as a Python toolbox (.pyt), load that into ArcGIS Pro, and then drag the tools in to your model.
# -*- coding: cp1252 -*- import arcpy class Toolbox(object): def __init__(self): self.label = "Utility" self.alias = "utility" self.tools = [InsertRow, InsertRowIntoTableA] class InsertRow(object): label="Insert Row" description="Inserts a row into a table" def getParameterInfo(self): parameters = [ arcpy.Parameter(name="in_table", displayName="Table", datatype="DETable", parameterType="Required", direction="Input"), arcpy.Parameter(name="row", displayName="Row", datatype="GPValueTable", parameterType="Required", direction="Input"), arcpy.Parameter(name="out_table", displayName="Edited Table", datatype="DETable", parameterType="Derived", direction="Output"), ] parameters[1].columns = [ ["GPString", "Field"], ["GPString", "Value"] ] return parameters def updateParameters(self, parameters): par = {p.name: p for p in parameters} in_table = str(par["in_table"].value) # reset fields if no table is selected if in_table == "None": par["row"].value = None return # get fields from the table target_fields = [ f.name for f in arcpy.ListFields(in_table) if f.type not in ("OID", "GlobalID", "Geometry") ] # get currently loaded fields current_fields = [] if par["row"].value is not None: current_fields = [ f for f, v in par["row"].value ] # if these don't match, a different table was selected -> change fields if current_fields != target_fields: par["row"].value = [[f, None] for f in target_fields] def execute(self, parameters, messages): par = {p.name: p for p in parameters} # get fields with user input row = [ [field, value] for field, value in par["row"].value if value not in ('', None) ] fields, values = list(zip(*row)) # insert the new row # all values are str, but the InsertCursor should take care of the conversion with arcpy.da.InsertCursor(str(par["in_table"].value), fields) as cursor: cursor.insertRow(values) # set the output parameter par["out_table"].value = par["in_table"].value class InsertRowIntoTableA(object): label="Insert Row into TableA" description="Inserts a row into TableA" def getParameterInfo(self): parameters = [ arcpy.Parameter(name="in_table", displayName="TableA", datatype="DETable", parameterType="Required", direction="Input"), arcpy.Parameter(name="ID_A", displayName="ID_A", datatype="GPLong", parameterType="Required", direction="Input"), arcpy.Parameter(name="TEXT_A", displayName="TEXT_A", datatype="GPString", parameterType="Required", direction="Input"), arcpy.Parameter(name="out_table", displayName="Edited TableA", datatype="DETable", parameterType="Derived", direction="Output"), ] return parameters def execute(self, parameters, messages): par = {p.name: p for p in parameters} # get the values fields = ["ID_A", "TEXT_A"] values = [ par[f].value for f in fields ] # insert the new row with arcpy.da.InsertCursor(str(par["in_table"].value), fields) as cursor: cursor.insertRow(values) # set the output parameter par["out_table"].value = par["in_table"].value
No. You would have to create a table, add your stuff and merge. Python scripting would allow for an InsertCursor to update an existing table
Les membres connectés peuvent publier, suivre les mises à jour, et plus encore. Nouveau ici ? Inscrivez-vous gratuitement.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.