Especificar una consulta en Python

El lenguaje estructurado de consultas (SQL) es un lenguaje eficaz que se utiliza para definir uno o más criterios que pueden estar compuestos de atributos, operadores y cálculos. Por ejemplo, imagine que tiene una tabla de datos de clientes y desea encontrar los que gastaron más de 50.000 $ con usted el año pasado y cuyo tipo de negocio es un restaurante. Seleccionaría los clientes con esta expresión: "Ventas > 50000 AND Tipo_negocio = 'Restaurante'".

Cuando se especifica una consulta para un cursor de actualización o búsqueda, se devuelven solo los registros que satisfacen esa consulta. Una consulta SQL representa un subconjunto de las consultas de tabla única que se pueden realizar en una tabla de una base de datos SQL utilizando la instrucción SQL SELECT. La sintaxis utilizada para especificar la cláusula WHERE es la misma que la de la base de datos subyacente que contiene los datos.

En el siguiente ejemplo se filtran las filas de un cursor de búsqueda a solo los caminos de una clase de camino concreta:

import arcpy

fc = "D:/St_Johns/data.gdb/roads"

# Create a search cursor using an SQL expression
#
cursor = arcpy.da.SearchCursor(fc, ("roadclass", "name"), """"roadclass" = 2""")
for row in cursor:
    # Print the name of the residential road
    #
    print(row[1])
Sugerencia:

En Python, la construcción de expresiones entre comillas triples es más fácil de leer y entender.

Utilizar AddFieldDelimiters con la expresión de SQL

Los delimitadores de campo utilizados en una expresión de SQL difieren dependiendo del formato de los datos consultados. Por ejemplo, las geodatabases de archivos y los shapefiles utilizan comillas dobles (" "), las geodatabases personales utilizan corchetes ([ ]) y las geodatabases de ArcSDE no utilizan delimitadores de campo. La función AddFieldDelimiters puede eliminar parte del trabajo de averiguar qué delimitadores de campo utilizados con la expresión de SQL son los correctos. El siguiente ejemplo expande el ejemplo anterior para agregar los delimitadores de campo apropiados para la expresión de SQL.

import arcpy

fc = "D:/St_Johns/data.gdb/roads"
fieldname = "roadclass"

# Create field name with the proper delimiters
#
whereclause = """{} = 2""".format(arcpy.AddFieldDelimiters(fc, fieldname))

# Create a search cursor using an SQL expression
#
cursor = arcpy.da.SearchCursor(fc, ("roadclass", "name"), whereclause)

for row in cursor:
    # Print the name of the residential road
    print(row[1])