Thursday 11 April 2019

arcpy - Subquery a list in select layer by attribute management using python


I am new to python and having trouble with my script.


I want only the records from the COMTRS field (of the pur_dbf_view) that match values from the ComtrsList to be selected; however, I am getting an "invalid expression" error message. I think to solve my problem, I need to write the python list (ComtrsList) to a .dbf or a file format that can be later referenced in the Select Layer by Attribute management at the end of the script. Is this right? Is my syntax for the subquery in the Select layer by Attribute statement correct?


import arcpy, sys, os, traceback

# Set workspace

arcpy.env.workspace = "H:\\GIS_AIR\\Python\\PUR_tool"

# Set variables
plss = "Plss.shp"
comm = "Communities_sub.shp" # Input Community feature class
c_layer = "Communities_layer_sub" # Name of the Make Feature Layer output for communities
p_layer = "Plss_layer" # Name of the Make Feature Layer output
plss_out = "Output_plss.shp" # Name of PLSS (selected) output feature. Make sure this has the .shp extension

search_distance = '0 MILES'


pur_dbf = "Glenn_pur.dbf"
pur_dbf_view = "Glenn_pur_view.dbf"

pur_dbf_sum = "Glenn_pur_sum.dbf"

comtrs_list_dbf = "Comtrs_list.dbf"
template = "TemplateA.dbf"




# Make feature layer for PLSS feature
arcpy.MakeFeatureLayer_management(plss, p_layer)

print "Completed make feature layer management PLSS"

# Make feature layer for Communities feature
arcpy.MakeFeatureLayer_management(comm, c_layer)
print "Completed make feature layer management Communities"


# Select features that are within 0 miles of comm fc
arcpy.SelectLayerByLocation_management(p_layer, "WITHIN_A_DISTANCE", c_layer, search_distance, "NEW_SELECTION")

arcpy.CopyFeatures_management(p_layer, plss_out)

# Create new table with template
arcpy.CreateTable_management("H:\\GIS_AIR\\Python\\PUR_tool", comtrs_list_dbf, template)

ComtrsList = []
ComtrsCursor = arcpy.SearchCursor(plss_out)

for row in ComtrsCursor:
comtrsValue = row.getValue("CO_MTRS")
ComtrsList.append(comtrsValue)
print ComtrsList

###Write ComtrsList to comtrs_list_dbf (.dbf)###
arcpy.MakeTableView_management(pur_dbf, pur_dbf_view)
print "Created table view"

# Select layer by attribute on the pur_dbf_view

arcpy.SelectLayerByAttribute_management(pur_dbf_view, "NEW_SELECTION", "\"COMTRS\" IN (SELECT \"COMTRS\" FROM comtrs_list_dbf)")

arcpy.Statistics_analysis(pur_dbf_view, pur_dbf_sum, [["LBS_AI", "SUM"]], "CODE")


No comments:

Post a Comment

arcpy - Changing output name when exporting data driven pages to JPG?

Is there a way to save the output JPG, changing the output file name to the page name, instead of page number? I mean changing the script fo...