SQL_arcpy

Autor: Lorenzo Martínez

En más de una ocasión os he hablado de la importancia que tiene el conocer un lenguaje como SQL para un Analista GIS. El uso de este lenguaje, sin embargo, para los Analistas GIS que no son usuarios de bases de datos y sí por ejemplo de ArcMap es ligeramente diferente. En el post que vamos a abordar ahora os voy a contar cómo trabajar con Python y SQL en ArcGIS o ArcPy. Este es sin duda uno de los caballos de batalla más “pesados” para los programadores de ArcPy. No es que sea complejo pero cuesta entender la mecánica del lenguaje.

La unión de lenguajes crea muchas dudas acerca de su sintaxis. Por tanto, vamos a bucear un poco en este problema tantas veces preguntado por alumnos y no alumnos.

Su uso en funciones del tipo “arcpy.da.UpdateCursor” o “arcpy.Select_analysis” es muy común. Cuando lo que quiero es trabajar sobre un subgrupo de datos y no sobre la capa entera tendré que echar mano de sentencias SQL. Así, podré decirle a ArcGIS qué es lo que quiero actualizar dentro de la capa o qué datos son los que quiero extraer.

 ¿Cómo lo haríamos en SQL estándar?

En SQL estándar usaríamos la sentencia del tipo where para concretar con qué datos quiero trabajar dentro de la tabla de una capa.

Por ejemplo, si estoy trabajando con datos sobre viviendas y  quiero restringir mi búsqueda a los edificios con más de 10 alturas, escribiré:

 

 ¿Y cómo lo hacemos con Python?

Como vamos a ver la idea es la misma, sin embargo la sintaxis no es igual. De hecho, la palabra “WHERE” no se escribe. En su lugar, para decirle a Python que vamos a escribir una sentencia de este tipo, vamos a escribirlo todo entre comillas simples o dobles:

‘<nombredelcampo> <operador> <valordelcampo>’

“<nombredelcampo> <operador> <valordelcampo>”

El nombre del campo se escribe entre corchetes si hace mención a una personal geodatabase y entre comillas dobles si se trata de un archivo, ArcSDE geodatabase o de shapefiles.

Por tanto, si queremos hacer una búsqueda que cumpla con la condición de que el nombre de la ciudad sea Sevilla, en SQL sería:

 

 ¿Las tres soluciones posibles?

Pero como nuestra intención es la de insertar la búsqueda en código Python, tendremos que cumplir con ciertas condiciones que darán pie, a su vez, a tres maneras de resolver el mismo problema. Vamos a mostraros estas tres posibilidades y dejamos a vuestra elección escoger la que más os guste:

  1. Usamos comillas dobles para la sentencia (las he pintado en rojo)

 

Os preguntaréis, ¿de dónde han salido las barras?. Resulta que las necesitamos para que Python distinga unas comillas dobles de las otras.

 

  1. Usamos comillas simples para la sentencia (las he pintado en rojo)

 

 

Ahora hemos tenido que utilizar las barras (llamadas barras de escape) con las comillas simples del valor del campo, Sevilla.

 

  1. Usamos comillas triples para la sentencia (las he pintado en rojo)

 

 

Como se puede observar, ahora no ha sido necesario escribir las barras de escape.

Ejemplos:

 

Espero que todo lo que hemos visto en este post os pueda servir para resolver las dudas que esta sintaxis general. Y lo cierto es que es en gran parte lógico ya que se trata de una secuencia de requisitos a cumplir y que se resuelven con la combinación de comillas simples, dobles y hasta triples. También espero que os quede claro cuándo hay que usar las barras de escape. Así todo, si seguís teniendo problemas con todo lo visto no dudéis en comentarlas.