Anteriormente expliqué cómo conectarse a una base de datos Postgres desde Python utilizando el driver pg8000. Esta vez voy a demostrar cómo instalar y utilizar el driver psycopg2, cuyo funcionamiento es muy similar al del driver pg8000.
De acuerdo a la página dedicada a Python en la Wiki de PostgreSQL, el driver psycopg2 es el más popular y utilizado por la mayoría de los framworks.
Psycopg2 es un adaptador PostgreSQL para el lenguaje Python implementado utilizando libpq, la librería oficial del cliente PostgreSQL.
Instalación en FreeBSD
Para instalar el driver psycopg2 FreeBSD simplemente se debe ejecutar:
# pkg install py27-psycopg2
O de manera alternativa instalar el paquete py36-psycopg2
para Python 3.6.
Instalación en Debian
En Debian y derivados, instalar el paquete python-psycopg2
:
# apt-get install python-psycopg2
O python3-psycopg2
para Python 3.
Uso básico
Para hacer uso del driver, primero es necesario importar el módulo:
import psycopg2
Luego definimos algunas variables para establecer la conexión con el servidor de bases de datos PostgreSQL:
# Postgres PSQL_HOST = "db.linuxito.com" PSQL_PORT = "5432" PSQL_USER = "usr_webapp" PSQL_PASS = "1234" PSQL_DB = "linuxito"
Un ejemplo de uso simple para obtener datos a través de una consulta SELECT
es el siguiente. Primero se conecta al servidor de bases de datos y se obtiene un cursor, luego se ejecuta una consulta, y finalmente se recuperan los datos en forma de objeto Python.
try: # Conectarse a la base de datos connstr = "host=%s port=%s user=%s password=%s dbname=%s" % (PSQL_HOST, PSQL_PORT, PSQL_USER, PSQL_PASS, PSQL_DB) conn = psycopg2.connect(connstr) # Abrir un cursor para realizar operaciones sobre la base de datos cur = conn.cursor() # Ejecutar una consulta SELECT sqlquery = "select id, username from user;" cur.execute(sqlquery) # Obtener los resultados como objetos Python row = cur.fetchone() # Cerrar la conexión con la base de datos cur.close() conn.close() # Recuperar datos del objeto Python username = row[1] # Hacer algo con los datos print(username) except: print("Error de base de datos")
Como mínimo se debe capturar una excepción genérica. Sin embargo cada operación con el driver puede arrojar diferentes tipos de excepciones:
StandardError |__ Warning |__ Error |__ InterfaceError |__ DatabaseError |__ DataError |__ OperationalError | |__ psycopg2.extensions.QueryCanceledError | |__ psycopg2.extensions.TransactionRollbackError |__ IntegrityError |__ InternalError |__ ProgrammingError |__ NotSupportedError
Para más información y ejemplos de consultas, revisar la documentación oficial del módulo psycopg2.
Referencias