Python_to_postgis

 Una de las cuestiones más recurrentes que nos encontramos a la hora de trabajar con PostgreSQL y PostGIS en entornos de producción, es la de cómo acceder a la base de datos desde programas externos. Es decir, cómo, por ejemplo, consultar la base de datos o actualizarla a través de Python.

De nuevo ha sido uno de los alumnos de nuestro Master GIS con Python el que lo ha resuelto. Dentro del material de formación tenemos un módulo que habla de conexiones con bases de datos pero no se hablaba, hasta ahora, de esta conexión.

Os vamos a describir de forma resumida qué es necesario para acceder a una base de datos PostGIS y cómo lanzar consultar la información almacenada.

El script completo lo tenéis aquí. Para que veáis lo sencillo que es el acceso

¿Cómo se conecta Python a una Base de datos?

Python cuenta con un standard para los interfaces de bases de datos que se llama python db-api. Se diseñó para facilitar el acceso desde diferentes módulos a las bases de datos. Permite acceder a varias bases de datos: Oracle, SQL Server, PostgreSQL, or MySQL

Para conectarse a Postgres hay varias librerías: psycopg2; PyGreSQL; pyPgSQL; mxODBC; pyodb;py-postgresql;txpostgres; pg8000;PyPyODBC (Pure Python ODBC);mxODBC Connect.

(El detalle aquí: https://wiki.python.org/moin/PostgreSQL)

Sin embargo, la más usada y con la que haremos el ejemplo es psycopg2

Establecer la conexión

 

Importamos la librería

Con la función connect() establecemos la conexión con los parámetros a la base de datos: Base de datos/Usuario/host/password

 Python_PostGIS

Crear un cursor

El cursor nos va a servir como el elemento que nos permita recoger la información de la base de datos. Así pues, lo primero es crear el cursor de acceso.

Ejecuta sentencia

Una vez creado vamos a ejecutar la consulta contra el cursor que nos permita recuperar la información. En este caso lo que queremos hacer es buscar los dos puntos más cercanos al par de coordenadas que se escribe en la sentencia: 40.4043654000 -3.88725460000

Leer los datos

Con un sencillo bucle for, de los que explicamos en nuestro video curso gratuito de Python, podemos acceder a cada registros