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!