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


Tal vez pueda interesarte


Compartí este artículo