• Saltar a la navegación principal
  • Saltar al contenido principal
  • Saltar al pie de página
logo web Geoinnova

Geoinnova

Consultoría y Formación en SIG y Medio Ambiente

  • Geoinnova
    • Asociación
    • Equipo
    • Visor de proyectos Geoinnova
    • Geolibrería
    • Alianzas Estratégicas
  • Consultoría
    • Consultoría y Desarrollo en Sistemas de Información Geográfica
    • Consultora Ambiental
    • Turismo sostenible
    • Planificación urbana y ordenación del territorio
    • Planes Urbanos de Actuación Municipal – PUAM
    • Geomarketing
  • Servicios
    • Planero Web
    • QElectricGIS
    • Plugins
  • Formación
    • Todos los cursos
    • Webinars
    • Máster y Diplomas
    • Cursos de ArcGIS
    • Cursos de QGIS
    • Cursos de Teledetección
    • Cursos de Medioambiente
  • Medio Ambiente
    • Consultora Ambiental
    • Estudios ambientales para proyectos de energías renovables
    • Estudios de Impacto e Integración Paisajística
    • Evaluación Ambiental Estratégica de planes y programas
    • Estudio de Impacto Ambiental para proyectos
    • Cálculo huella de carbono
    • Educación Ambiental
    • Cursos de Medioambiente
  • Coworking
  • Blog
    • SIG
    • Medio Ambiente
    • Teledetección
    • Programación y Desarrollo SIG
    • Corporativo
  • Contacto
    • Soporte de Clientes – Tickets
Programación y Desarrollo SIG

Psycopg2 para acceder a una base de datos PostGIS con Python

06/02/2023 1 comentario

Gracias a la versatilidad de Python y a la multitud de librerías existentes, podemos usar este popular lenguaje de programación para multitud de procesos y trabajos relacionados con el tratamiento y análisis de información espacial. En el siguiente artículos vamos a ver cómo podemos acceder a nuestra base de datos geográfica PostgreSQL-PostGIS con la librería psycopg2 y realizar consultas y operaciones sobre con nuestros datos SIG.

Instalación dela librería psycopg2.

Psycopg2 es una librería de Python que proporciona una interfaz para conectarse y trabajar con bases de datos PostgreSQL. Con ella, se pueden ejecutar consultas SQL, realizar transacciones, manejar errores entre otras funciones.

Para comenzar a usarla en nuestros scripts de Python debemos tenerla instalada antes. Un hábito recomendable es hacer la instalación de librerias de terceros dentro de entorno virtual. Gracias a esta práctica  controlaremos las versiones de librerías y paquetes usadas en el proyecto, con independencia de las existentes en nuestro equipo.

En el siguiente código vemos como hacerlo usando nuestra terminal de comandos o dentro .

# Crear entorno virtual
python3 -m venv geoenv
# Activar entorno virtual (en Windows)
geoenv\Scripts\activate.bat
# Activar entorno virtual (en Linux/macOS)
source geoenv/bin/activate
# Instalar las librerías
pip install psycopg2

Conexión a la nuestra base de datos PostGIS

Partimos del hecho de que tenemos acceso a una bases de datos PostgreSQL/PostGIS .

Ya dentro de nuestro editor de código o IDE, lo primero que necesitamos es importar las librerías necesarias.

import psycopg2

Vamos a continuar creando una variable de tipo diccionario que tenga los parámetros de nuestra conexión.

# Parámetros de conexión
parametros = {
    "host": "direccion_servidor",
    "port": "puerto",
    "user": "nombre_del_usuario",
    "password": "contraseña",
    "database": "nombre_de_la_base_de_datos"
}

Y terminamos creando la conexión.

conn = psycopg2.connect(**parametros)
Código Python para conexión a basee de datos PostgreSQL. Parámetros
Código Python para conexión a basee de datos PostgreSQL. Parámetros

Ejecución de consultas SQL

Establecida nuestra conexión, estamos en condiciones de ejecutar las sentencias en lenguaje SQL que necesitemos. Para ello vamos a necesitar crear primero un objeto de tipo cursor que nos permitirá interactuar con la base de datos, manejar transacciones y obtener resultados.

En el siguiente ejemplo realizamos una consulta a la tabla ‘poblaciones’, almacenando los resultados en una variable y mostrándolos, usando la estructura de control iterativa for.

# Crear cursor
cur = conn.cursor()
# Ejecutar consulta para obtener todas las filas de barrios
cur.execute("SELECT id, nombre, distrito FROM barrios")

Para poder acceder a los resultados los pasaremos una nueva variable que crea un objeto de tipo lista. Este objeto contiene una lista ordenada de elementos o tupla con las filas de la tabla. Para ello usamos el método del cursor fetchall().

# Obtener resultados
resultados = cur.fetchall()
# Recorrer y mostrar resultados
for fila in resultados:
    print(fila)
Consulta SQL
Consulta SQL

Siempre que vayamos a añadir nuevos datos (INSERT), actualizar (UPDATE) o borrar registros (DELETE), además de ejecutar el código SQL correspondiente deberemos guardar los cambios con la función commit().

# Ejecutar consulta DELETE que borra el barrio con el id 1
cur.execute("DELETE FROM barrios WHERE id = %s", (1,))
# Guardar cambios
conn.commit()

Uso de funciones espaciales de PostGIS

Gracias a que hemos dotado a nuestra base de datos de capacidad de almacenamiento y análisis de objetos geográficos con la extensión PostGIS, será posible también realizar consultas espaciales.

Vamos algunas de ellas.

# Ejecutar consulta para calcular el área de un polígono
cur.execute("SELECT id, nombre, distrito, ST_Area(geom) FROM barrios WHERE ST_Area(geom) > %s", (50000,))
resultados_area = cur.fetchall()
Consulta espacial

Y aquí otro ejemplo haciendo una intersección.

# Ejecutar consulta para obtener la intersección entre dos capas
cur.execute("SELECT ST_Intersection(geom1, geom2) FROM barrios, poblaciones WHERE barrios.id_poblacion = poblaciones.id")
resultados_intersec = cur.fetchall()

Cerrando el curso y la conexión

Una vez realizadas nuestras consultas y operaciones es importante cerrar tanto el cursor abierto como la conexión usando close(). Al abrir una conexión estamos reservando recursos del sistema (memoria y conexiones de red) y esta función los liberará. Además, al cerrar la conexión se asegura de que se guarden todos los cambios realizados en la base de datos, es decir se hace un commit de las operaciones realizadas.

cur.close()
conn.close()

Documentación

  • Librería Psycopg https://www.psycopg.org/docs/
  • Función ST_AREA de PostGIS  https://postgis.net/docs/ST_Area.html
  • Función ST_Intersection de PostGIS https://postgis.net/docs/ST_Intersection.html

Etiquetas: postgis, python

Apúntate a nuestra newsletter semanal

"*" señala los campos obligatorios

Consentimiento*
Este campo es un campo de validación y debe quedar sin cambios.

Información legal

Cumplimos el RGPD (Reglamenteo General de Protección de Datos) y esta en la primera información que debes saber. Responsable: Asociación Geoinnova. Finalidad: Apuntarte en nuestra base de datos para poder enviarte nuestra newsletter y cualquier otra información de interes. Legitimidad: Nos das tu consentimiento para comunicarnos contigo. Derechos: Tienes derecho a acceder, rectificar, limitar y suprimir tus datos. Para una información más ampliada entra a nuestra política de privacidad.

Artículos relacionados

Cómo documentar proyectos en QGIS con el complemento ‘Project Reports’
17/01/2023
Cómo trabajar con nuestra base de datos PostgreSQL usando psql
08/11/2022
DBeaver: software para la gestión de bases de datos
20/10/2022

Patricio Soriano

Geógrafo “Full-stack” y desarrollador web especializado en Tecnologías de Información Geográfica. Vinculado con la labor de consultoría, ha realizado diversos proyectos sobre análisis urbanístico, planes de vivienda y gestión patrimonial, así como la puesta en marcha de Sistemas de Información Geográfica corporativos para la administración pública. Dentro de los trabajos como desarrollador se encuentran el diseño de varias aplicaciones webmapping y desarrollos para QGIS (Spanish Inspire Catastral Downloader, CDAU Downloader o qgis2mapea). Autor del blog www.sigdeletras.com y organizador de Geoinquietos Córdoba. Actualmente se encuentra incorporado al equipo de desarrollo de Geoinnova en aplicaciones Open Source. Como docente lleva impartiendo cursos profesionales de SIG desde 2007 para diferentes entidades y en diferentes modalidades (tanto presencial como online). Especializándose en los últimos años en cursos de QGIS a distintos niveles.

Interacciones con los lectores

Comentarios

  1. Factor Eufemio González Juárez dice

    07/02/2023 a las 11:50

    Me es muy grato enterarme de éste Programa Master en Sistemas de Información Geográficas.
    Para iniciarlo en febrero 2023

    Responder

¿Quieres comentarnos algo? Adelante! Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Footer

Menú Legal

  • Aviso Legal
  • Política de privacidad
  • Política de cookies
  • Términos y condiciones

Otras páginas de interes

  • Promociones y descuentos en formación
  • Formación bonificada FUNDAE

Contacto

Calle Luis Morondo Urra nº 8 Bajo A
31006 Pamplona (Navarra)
info@geoinnova.org
+34 948 117 137

Horario de atención

Lunes a Viernes - 09:00 a 14:00 y de 16:00 a 19:00.
Fines de semana y Festivos - Exclusivamente por mail.
Horario de Verano (01 de julio al 30 de agosto): De lunes a viernes de 8 a 15h.

Síguenos en Redes Sociales

Apúntate a nuestra newsletter

"*" señala los campos obligatorios

Consentimiento*
Este campo es un campo de validación y debe quedar sin cambios.

Entidad adherida a Confianza Online Certificado de inscripción en el Registro de huella de carbono, compensación y proyectos de absorción Logo Plazox

© 2023 · Desarrollada por Geoinnova en colaboración con OikosMSP

Gestionar el Consentimiento de las Cookies
Utilizamos tecnologías como las cookies para almacenar y/o acceder a la información del dispositivo. Lo hacemos para mejorar la experiencia de navegación y para mostrar anuncios personalizados. El consentimiento a estas tecnologías nos permitirá procesar datos como el comportamiento de navegación o las identificaciones únicas en este sitio. No consentir o retirar el consentimiento, puede afectar negativamente a ciertas características y funciones.
Funcional Siempre activo
El almacenamiento o acceso técnico es estrictamente necesario para el propósito legítimo de permitir el uso de un servicio específico explícitamente solicitado por el abonado o usuario, o con el único propósito de llevar a cabo la transmisión de una comunicación a través de una red de comunicaciones electrónicas.
Preferencias
El almacenamiento o acceso técnico es necesario para la finalidad legítima de almacenar preferencias no solicitadas por el abonado o usuario.
Estadísticas
El almacenamiento o acceso técnico que es utilizado exclusivamente con fines estadísticos. El almacenamiento o acceso técnico que es utilizado exclusivamente con fines estadísticos anónimos. Sin una requerimiento, el cumplimiento voluntario por parte de su proveedor de servicios de Internet, o los registros adicionales de un tercero, la información almacenada o recuperada sólo para este propósito no se puede utilizar para identificarlo.
Marketing
El almacenamiento o acceso técnico es necesario para crear perfiles de usuario para enviar publicidad, o para rastrear al usuario en un sitio web o en varios sitios web con fines de marketing similares.
Administrar opciones Gestionar los servicios Gestionar proveedores Leer más sobre estos propósitos
Preferencias
{title} {title} {title}