Conexión a una base de datos PostgreSQL, con extensión PostGis, mediante script en la Python Console de QGIS

El módulo psycopg2 es una interface de programación de aplicaciones (API) para acceder a bases de datos del tipo PostgreSQL con Python. Por tanto, en este post se va a implementar un script muy sencillo para conectar a una base de datos, con extensión PostGis, empleando la Python Console de QGIS en GNU/Linux Debian. Para ello, nos basaremos en el tutorial cuyo link se reseña a continuación:

https://wiki.postgresql.org/wiki/Psycopg2_Tutorial

Antes de ejecutar el script, primero se creó la base de datos ‘utah’ (SRID: 32612); con ‘curso_pyqgis’ como propietario y accedida en modo local. Después de añadir la extensión postgis a la base de datos, se le incorporó un shapefile (polygon8.shp) como tabla mediante el comando shp2pgsql-gui; de manera similar a como se tiene aquí.

Como la intención era establecer la sintaxis correcta para el funcionamento de los comandos y a sabiendas de que campos contenía el shapefile en su tabla atributiva, se planteó establecer como primera aproximación la conexión a la base de datos ‘utah’ y la consulta al campo ‘area’ de su tabla ‘polygon8’.

El script es el siguiente:

import psycopg2

try:
    conn = psycopg2.connect(dbname='utah', 
                            port=5432, 
                            user='curso_pyqgis',
                            password='pyqgis', 
                            host='localhost')
except:
    print "I am unable to connect to the database"

cur = conn.cursor()

cur.execute("SELECT datname FROM pg_database")

rows = cur.fetchall()

print "\nShow me the databases:\n"

for row in rows:
    print "   ", row[0]
    
cur.execute("SELECT area FROM polygon8")

rows = cur.fetchall()

print "\n id    areas"

for i,row in enumerate(rows):
    print " ", i, row[0]
    
cur.close()
conn.close()

y después de ejecutado en la Python Console de QGIS produce el resultado siguiente:

Python Console 
Use iface to access QGIS API interface or Type help(iface) for more info
execfile(u'/home/zeito/pyqgis_scripts/postgis.py'.encode('UTF-8'))

Show me the databases:

    template1
    template0
    postgres
    postgis_cookbook
    utah

 id    areas
  0 138971089.37
  1 280502186.97
  2 373715925.39
  3 213453359.47
  4 196392600.50
  5 144829440.04
  6 127035968.31
  7 162925151.13

Posteriormente, al cargar la capa PostGis (polygon8) a la Map View de QGIS (imagen siguiente) se puede observar que las áreas impresas a través de la Python Console coinciden con las de la tabla de atributos. El script funciona como se esperaba.

postgis2

Esta entrada fue publicada en Código Python, Postgres+postgis, QGIS. Guarda el enlace permanente.

8 respuestas a Conexión a una base de datos PostgreSQL, con extensión PostGis, mediante script en la Python Console de QGIS

  1. y porque no usas directamente QgsVectorLayer y la conexión con QgsDataSourceURI?

  2. fhelipeblog dijo:

    Hola José, muy buen post!
    Una consulta: en cur.execute(“SELECT datname FROM pg_database”) también se puede ejecutar una query del tipo INSERT?
    Saludos!

  3. Gracias.

    Si, por supuesto, eso es algo que probaré más adelante pero si tu te animas antes🙂. Ahora estoy probando la conexión con PyQGIS y la carga de shapefiles a la database con ogr2ogr.

    Saludos

  4. Pingback: Conexión a una base de datos PostgreSQL, con extensión PostGis, mediante PyQGIS | El Blog de José Guerrero

  5. Pingback: Conexión a una base de datos PostgreSQL,...

  6. Pingback: Importación en Postgis de shapefiles mediante ogr2ogr en un script de Python | El Blog de José Guerrero

  7. Pingback: Conexión a una base de datos PostgreSQL,...

Responder

Por favor, inicia sesión con uno de estos métodos para publicar tu comentario:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s