Cómo conectar PostgreSQL con Python: Guía práctica

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Conexión de base de datos PostgreSQL en Python: guía completa para desarrolladores

Trabajar con bases de datos es una parte fundamental de cualquier proyecto de software moderno. PostgreSQL es uno de los sistemas de gestión de bases de datos relacionales más populares, conocido por su fiabilidad, alto rendimiento y amplia funcionalidad.

En este artículo, analizaremos en detalle cómo conectar una base de datos PostgreSQL en Python, trabajar con datos usando SELECT y DELETE, y exploraremos el uso de la librería psycopg2 con ejemplos prácticos. También abordaremos el tema de SQLite y sus diferencias con PostgreSQL.

Ventajas de PostgreSQL para desarrolladores

PostgreSQL es muy demandado entre los desarrolladores gracias a las siguientes características:

  • Soporte para consultas SQL complejas y tipos de datos avanzados
  • Alta fiabilidad y seguridad de los datos
  • Soporte para transacciones, índices, disparadores y vistas
  • Excelente escalabilidad para proyectos grandes
  • Código abierto y comunidad activa

PostgreSQL también admite datos JSON, arreglos, tipos de datos personalizados y múltiples extensiones, lo que lo convierte en una solución versátil para diversas tareas.

Instalación de PostgreSQL y configuración del entorno

Instalación de PostgreSQL en diferentes sistemas operativos

Windows: Descarga el instalador desde el sitio oficial de PostgreSQL y sigue las instrucciones del asistente de instalación.

Linux (Ubuntu/Debian):

sudo apt update
sudo apt install postgresql postgresql-contrib

macOS:

brew install postgresql

Creación de base de datos y usuario

Después de instalar PostgreSQL, es necesario crear una base de datos y un usuario para trabajar:

CREATE DATABASE mi_base_datos;
CREATE USER mi_usuario WITH PASSWORD 'mi_contraseña';
GRANT ALL PRIVILEGES ON DATABASE mi_base_datos TO mi_usuario;

Configuración del acceso a la base de datos

Para garantizar una conexión segura, se recomienda:

  • Configurar el archivo pg_hba.conf para gestionar el acceso
  • Establecer contraseñas seguras para los usuarios
  • Usar conexiones SSL para accesos remotos
  • Limitar el acceso de red mediante un firewall

Conexión a PostgreSQL desde Python

Instalación y configuración de psycopg2

Para trabajar con PostgreSQL en Python, la librería más utilizada es psycopg2. Instálala usando pip:

pip install psycopg2

Si tienes problemas de compilación, usa la versión binaria:

pip install psycopg2-binary

Conexión básica a la base de datos

import psycopg2

try:
    conexion = psycopg2.connect(
        database="mi_base_datos",
        user="mi_usuario",
        password="mi_contraseña",
        host="localhost",
        port="5432"
    )
    print("¡Conexión establecida correctamente!")
except Exception as e:
    print(f"Error de conexión: {e}")
finally:
    if conexion:
        conexion.close()
        print("Conexión cerrada.")

Uso del administrador de contexto

Para gestionar la conexión automáticamente, se recomienda usar el administrador de contexto:

import psycopg2

with psycopg2.connect(
    database="mi_base_datos",
    user="mi_usuario",
    password="mi_contraseña",
    host="localhost",
    port="5432"
) as conexion:
    cursor = conexion.cursor()
    cursor.execute("SELECT version();")
    version = cursor.fetchone()
    print(f"Versión de PostgreSQL: {version}")

Ejecución de consultas SQL en PostgreSQL

Ejecución de consultas SELECT

import psycopg2

with psycopg2.connect(
    database="mi_base_datos",
    user="mi_usuario",
    password="mi_contraseña",
    host="localhost",
    port="5432"
) as conexion:
    cursor = conexion.cursor()
    cursor.execute("SELECT * FROM usuarios WHERE activo = true;")
    resultados = cursor.fetchall()
    for fila in resultados:
        print(fila)

Ejecución de consultas DELETE

import psycopg2

with psycopg2.connect(
    database="mi_base_datos",
    user="mi_usuario",
    password="mi_contraseña",
    host="localhost",
    port="5432"
) as conexion:
    cursor = conexion.cursor()
    cursor.execute("DELETE FROM usuarios WHERE id = %s;", (123,))
    conexion.commit()
    print(f"Filas eliminadas: {cursor.rowcount}")

Uso de consultas parametrizadas

Para evitar inyecciones SQL, siempre usa consultas parametrizadas:

import psycopg2

with psycopg2.connect(
    database="mi_base_datos",
    user="mi_usuario",
    password="mi_contraseña",
    host="localhost",
    port="5432"
) as conexion:
    cursor = conexion.cursor()
    nombre = "Juan"
    cursor.execute("SELECT * FROM usuarios WHERE nombre = %s;", (nombre,))
    usuarios = cursor.fetchall()
    for usuario in usuarios:
        print(usuario)

Manejo de transacciones

PostgreSQL admite transacciones, lo que permite agrupar varias operaciones en una sola unidad atómica:

import psycopg2

with psycopg2.connect(
    database="mi_base_datos",
    user="mi_usuario",
    password="mi_contraseña",
    host="localhost",
    port="5432"
) as conexion:
    try:
        cursor = conexion.cursor()
        cursor.execute("UPDATE cuentas SET saldo = saldo - 100 WHERE id = 1;")
        cursor.execute("UPDATE cuentas SET saldo = saldo + 100 WHERE id = 2;")
        conexion.commit()
        print("Transferencia exitosa.")
    except Exception as e:
        conexion.rollback()
        print(f"Error, transacción revertida: {e}")

Comparación entre PostgreSQL y SQLite

SQLite es una base de datos ligera ideal para prototipos y aplicaciones pequeñas, mientras que PostgreSQL está diseñado para sistemas de producción a gran escala. Principales diferencias:

  • Concurrencia: PostgreSQL soporta múltiples conexiones simultáneas; SQLite bloquea escrituras concurrentes.
  • Funcionalidad: PostgreSQL ofrece tipos de datos avanzados, procedimientos almacenados y extensiones; SQLite es más limitado.
  • Rendimiento: PostgreSQL maneja grandes volúmenes de datos y consultas complejas de manera más eficiente.
  • Configuración: SQLite no requiere servidor; PostgreSQL necesita instalación y configuración.

Buenas prácticas al trabajar con PostgreSQL en Python

  • Usa siempre consultas parametrizadas para prevenir inyecciones SQL
  • Gestiona las conexiones con administradores de contexto
  • Implementa manejo de errores con bloques try-except
  • Utiliza transacciones para operaciones críticas
  • Cierra las conexiones y cursores después de usarlos
  • Configura un pool de conexiones para aplicaciones con alta demanda

Conclusión

Conectar PostgreSQL con Python usando psycopg2 es un proceso sencillo que abre las puertas a aplicaciones robustas y escalables. Hemos cubierto desde la instalación hasta la ejecución de consultas SELECT y DELETE, pasando por el manejo de transacciones y buenas prácticas.

Te invitamos a practicar con los ejemplos proporcionados y explorar más funcionalidades de PostgreSQL. ¡Comienza a construir tus propias aplicaciones con bases de datos hoy mismo!

Blogs

Book Recommendations