jueves, 20 de diciembre de 2018

Accediendo a Postgresql desde Python

Continuando con la anterior entrada del blog donde se explica cómo instalar Postgresql y realizar las configuraciones iniciales básicas, vamos a ver ahora un ejemplo de conexión a esta base de datos usando Python.
Se usará Python 2.7 y para conectar con la BD se utilizará la librería Pygresql.

Instalación de la libería de conexión

En el equipo cliente, instalaremos la librería que permite a Python conectar con el servidor de BD:
$ sudo apt install python-pygresql

Configurar la conexión

La conexión a la BD se hará mediante la siguiente llamada:
#!/usr/bin/env python2
# -*- coding: latin-1 -*-

import pg

conexion = pg.connect(dbname='postgres', user='postgres', passwd='1234', host='192.168.1.133')

Como se observa en el ejemplo, inicialmente se hace un import de la librería pg (Pygres). Tras esto, se inicia la conexión a la BD indicando la IP o nombre del servidor, el nombre de la BD a conectarnos (el servidor de Postgresql puede servir múltiples BD por lo que hay que indicar a cuál conectarnos) y las credenciales de acceso al servicio de BD mediante usuario y contraseña.

Inserción de datos

Veamos un ejemplo de instrucción SQL del tipo INSERT, aunque esta sección es aplicable a UPDATE, DELETE, etc.
#!/usr/bin/env python2
# -*- coding: latin-1 -*-

import pg

conexion = pg.connect(dbname='postgres', user='postgres', passwd='1234', host='192.168.1.133')

consulta_sql = 'insert into test values (1, \'uno\')'
resultado = conexion.query(consulta_sql)

Se realiza un insert en la tabla test. Hemos asumido que esta tabla existe previamente en la BD. En caso de no existir, obtendremos un mensaje de error de este tipo:
Traceback (most recent call last):
File "./ejemplo.py", line 9, in <module>
resultado = conexion.query(consulta_sql)
pg.ProgrammingError: ERROR: no existe la relación «test»
LINE 1: insert into test values (1, 'uno')

La tabla se puede crear desde Python. Bastará con ejecutar lo siguiente:
#!/usr/bin/env python2
# -*- coding: latin-1 -*-

import pg

conexion = pg.connect(dbname='postgres', user='postgres', passwd='1234', host='192.168.1.133')

consulta_sql = 'create table test (id int primary key, nombre text)'
resultado = conexion.query(consulta_sql)

Ahora ya se podrá ejecutar el script que realiza el INSERT.

Consulta de datos

Llega el momento de hacer un SELECT sobre la tabla test.
#!/usr/bin/env python2
# -*- coding: latin-1 -*-

import pg

conexion = pg.connect(dbname='postgres', user='postgres', passwd='1234', host='192.168.1.133')

consulta_sql = 'select * from test'
resultado = conexion.query(consulta_sql).getresult()

print "Número de filas:", len(resultado)
for fila in resultado:
    print fila[0], fila[1]

Como se observa, se puede conocer el número de filas resultantes de la consulta y acceder a cada uno de los campos de cada fila resultado.
Como siempre, estas indicaciones son solamente un comienzo en el uso de bases de datos desde Python. Para profundizar en el uso de esta librería, se recomienda consultar la documentación oficial en la web de Pygresql.