12 Días de DigitalOcean (Día 2) – Conectando a Tu Base de Datos PostgreSQL con Python

¡Bienvenido a Día 2 de 12 Días de DigitalOcean! Ayer, comenzamos a construir nuestro Servicio de Recordatorio de Cumpleaños, una aplicación simple que envía notificaciones por SMS para los cumpleaños próximos. 🎉 Configuramos una base de datos PostgreSQL en DigitalOcean para almacenar los detalles de contacto.

Hoy, nos conectaremos a esa base de datos utilizando Python y configuraremos nuestro proyecto para mantener a salvo las credenciales sensibles.

Al final de este artículo, tendrás un script de Python que obtiene datos de tu base de datos de forma segura y está listo para escalar cuando lo alojemos en DigitalOcean.

✨ ¿Por Qué Este Paso?

Configurar la base de datos fue solo el comienzo. Para construir cualquier aplicación significativa, necesitamos una forma de interactuar con esos datos de manera programática. Python facilita la conexión a bases de datos PostgreSQL, y con la ayuda de una biblioteca como pg8000, podemos trabajar con bases de datos PostgreSQL en solo unas pocas líneas de código.

Para mantener las cosas seguras, almacenaremos nuestras credenciales de base de datos en un archivo .env y las cargaremos en nuestro script utilizando python-dotenv. Esto asegura que tus credenciales no estén codificadas en el script, lo que hace que sea más seguro compartir y desplegar tu aplicación.

🚀 Lo que aprenderás

Aquí está el plan para hoy:

  1. Almacenar credenciales sensibles en un archivo .env.
  2. Usar python-dotenv para cargar esas credenciales en tu script.
  3. Escribir un script de Python para conectarse de manera segura a tu base de datos PostgreSQL utilizando pg8000
  4. Obtener y mostrar datos de la tabla contacts

Al final de esto, tendrás una base sólida para construir la lógica de la aplicación.

🛠 Lo que necesitarás

Antes de sumergirnos, aquí tienes lo que necesitarás:

  • La base de datos que configuramos en Día 1. TODO: Enlace a la URL del día 1
  • Python instalado en tu máquina local (recomendamos Python 3.8+).

🧑‍🍳 Receta para el Día 2: Conectando a PostgreSQL con Python

Paso 1: Instalar las Bibliotecas Requeridas 📦

Para conectar Python a PostgreSQL y mantener nuestras credenciales seguras, utilizaremos dos bibliotecas clave:

  • pg8000: Una biblioteca de Python puro que te permite conectarte e interactuar con bases de datos PostgreSQL.
  • python-dotenv: Una utilidad para cargar credenciales sensibles (como nombres de usuario y contraseñas de bases de datos) desde un archivo .env, para que no tengas que codificarlas en tu script.

Vamos a instalarlas ahora. Ejecuta este comando en tu terminal:

pip install pg8000 python-dotenv

Consejo Profesional: Si estás utilizando un entorno virtual (siempre es una buena idea), asegúrate de activarlo antes de ejecutar el comando anterior para mantener tus dependencias organizadas.

Paso 2: Crea un archivo .env 📂

En el directorio de tu proyecto, crea un archivo llamado .env. Aquí es donde almacenaremos nuestras credenciales de la base de datos. Agrega lo siguiente:

DB_HOST=<your-hostname>
DB_NAME=<your-database-name>
DB_USER=<your-username>
DB_PASSWORD=<your-password>

Reemplaza los valores de marcador de posición con las credenciales de Día 1.

Consejo Profesional: Agrega .env a tu archivo .gitignore para asegurarte de que tus credenciales no se suban accidentalmente al control de versiones.

Paso 3: Crea un script de Python 🐍

Crea un nuevo archivo llamado connect_to_db.py, y configura el script para cargar las credenciales desde .env usando python-dotenv, y conectar a nuestra base de datos.

Aquí está el código para empezar:

# connect_to_db.py

import pg8000
from dotenv import load_dotenv
import os

# Cargar variables de entorno desde el archivo .env
load_dotenv()

# Detalles de la conexión a la base de datos
DB_HOST = os.getenv("DB_HOST")
DB_NAME = os.getenv("DB_NAME")
DB_USER = os.getenv("DB_USER")
DB_PASSWORD = os.getenv("DB_PASSWORD")
DB_PORT = int(os.getenv("DB_PORT"))

try:
    # Conectar a la base de datos
    connection = pg8000.connect(
        host=DB_HOST,
        database=DB_NAME,
        user=DB_USER,
        password=DB_PASSWORD,
        port=DB_PORT
    )
    print("Connection successful!")
except Exception as e:
    print("An error occurred while connecting to the database:", e)
finally:
    if connection:
        connection.close()

Este script hace algunas cosas importantes:

  • Carga las credenciales de forma segura desde tu archivo .env.
  • Establece una conexión a tu base de datos utilizando pg8000.connect().
  • Imprime un mensaje de éxito o error dependiendo del resultado.

Paso 4: Prueba la Conexión ✅

Ahora, asegurémonos de que todo funcione. Ejecuta tu script:

python connect_to_db.py

Si todo está configurado correctamente, deberías ver:

Connection successful!

Si hay un error:

  • Verifica los valores en tu archivo .env.
  • Asegúrate de que tu dirección IP esté añadida a las fuentes de confianza de la base de datos (consulta el Paso 6 del Día 1).

Paso 5: Obtener Datos de la Base de Datos 🔍

Ahora, ampliemos el script para obtener datos. Actualiza tu connect_to_db.py script para incluir lo siguiente:

# connect_to_db.py

import pg8000
from dotenv import load_dotenv
import os

# Cargar variables de entorno desde el archivo .env
load_dotenv()

# Detalles de conexión a la base de datos
DB_HOST = os.getenv("DB_HOST")
DB_NAME = os.getenv("DB_NAME")
DB_USER = os.getenv("DB_USER")
DB_PASSWORD = os.getenv("DB_PASSWORD")
DB_PORT = int(os.getenv("DB_PORT"))

try:
    # Conectar a la base de datos
    connection = pg8000.connect(
        host=DB_HOST,
        database=DB_NAME,
        user=DB_USER,
        password=DB_PASSWORD,
        port=DB_PORT
    )
    print("Connection successful!")

    # Consultar la base de datos
    cursor = connection.cursor()
    query = "SELECT * FROM contacts;"
    cursor.execute(query)
    records = cursor.fetchall()

    # Imprimir los resultados
    print("Contacts:")
    for record in records:
        print(record)

    # Cerrar el cursor y la conexión
    cursor.close()
    connection.close()

except Exception as e:
    print("An error occurred:", e)

Este script ahora:

  • Ejecuta una consulta para obtener todos los registros de la tabla de contactos.
  • Imprime cada registro en la consola.

Nota: Si la tabla está vacía, ¡no te preocupes! Aún puedes verificar que el script se ejecute sin errores. Para probar, puedes agregar rápidamente un contacto de muestra abriendo tu base de datos usando psql (o tu herramienta preferida) y ejecutando este comando SQL:

INSERT INTO contacts (first_name, last_name, birthday) 
VALUES ('Test', 'User', '1990-01-01');

Si necesitas un recordatorio sobre cómo usar psql o quieres explorar herramientas de interfaz de usuario como pgAdmin o TablePlus, consulta las instrucciones en Día 1.

🎁 Resumen

Aquí está lo que lograste hoy:

✅ Instalaste las bibliotecas de Python requeridas.
✅ Te conectaste a tu base de datos PostgreSQL de DigitalOcean usando Python.
✅ Recuperaste datos de la tabla contacts con una consulta simple.

Próximo: Mañana, comenzaremos a añadir lógica para encontrar cumpleaños próximos y enviar notificaciones SMS usando Twilio. Aquí es donde la aplicación comienza a cobrar vida—¡mantente atento! 🚀

Source:
https://www.digitalocean.com/community/tutorials/connecting-to-postgresql-database-with-python