Contenido del curso

Consultas SQL de PostgreSQL en Jupyter

Resumen

Conectar Jupyter Notebooks con PostgreSQL te permite ejecutar consultas SQL directamente desde Python y visualizar los resultados con la flexibilidad de un data frame. Es ideal si quieres ir más allá de PgAdmin y empezar a explorar tus datos con gráficas y análisis avanzado.

¿Qué paquetes necesitas instalar para conectar Jupyter con PostgreSQL?

Antes de escribir cualquier consulta, necesitas dos librerías de Python que harán todo el trabajo pesado por ti.

  • psycopg2-binary: es el adaptador que permite que Python se comunique con PostgreSQL. Sin este paquete, tu notebook no puede hablar con la base de datos.
  • pandas: organiza la información que recibes de la base de datos en un data frame, una estructura mucho más cómoda que una lista cruda de resultados.

Puedes instalar ambos en celdas separadas o fusionarlos en una sola línea para ahorrar espacio. La instalación se hace anteponiendo el signo de admiración, así:

python !pip install psycopg2-binary pandas

¿Qué es psycopg2-binario? Es un adaptador de Python que permite enviar consultas SQL a una base de datos PostgreSQL y recibir los resultados en tu código.

¿Cómo establecer la conexión a Postgres desde un notebook?

Una vez instalados los paquetes, necesitas importarlos y abrir la conexión al servidor [2:00]. Para eso necesitas cuatro datos clave:

  • El nombre de la base de datos.
  • El usuario.
  • El password (en este caso, Platzi Rules).
  • El host, que es la dirección IP del servidor.

Si no recuerdas la dirección IP, abre PgAdmin y la encontrarás en la parte superior. En la clase aparece como 172.29.39.4. El puerto se deja en su valor por defecto.

Un ejemplo del bloque de conexión luce así:

python import psycopg2 import pandas as pd

conn = psycopg2.connect( dbname="tu_base", user="tu_usuario", password="Platzi Rules", host="172.29.39.4" ) cur = conn.cursor()

¿Cómo ejecutar una consulta SQL y visualizarla con pandas?

Con la conexión lista, las consultas se escriben igual que en PgAdmin. La diferencia es que ahora puedes pasarlas a un data frame para verlas mejor.

Por ejemplo, para traer seis registros de la tabla customer:

python query = "SELECT * FROM customer LIMIT 6" cur.execute(query) df = pd.read_sql(query, conn) df

El LIMIT 6 es útil cuando estás haciendo pruebas y no quieres traer toda la tabla. Pandas se encarga de mostrar el resultado y, si las columnas no caben, las acomoda por secciones automáticamente.

¿Por qué usar pandas con SQL? Porque convierte los resultados en un data frame, lo que te permite filtrar, fusionar y graficar la información sin reescribir la consulta.

¿Por qué cerrar el cursor y la conexión?

Al terminar tus consultas, debes cerrar tanto el cursor como la conexión para liberar recursos del servidor:

python cur.close() conn.close()

Es una buena práctica que evita conexiones colgadas y errores en sesiones largas.

¿Cómo ejecutar todo el notebook de una sola vez?

Jupyter te da dos opciones para correr tu código:

  1. Ejecutar celda por celda con el botón de play, ideal cuando estás depurando.
  2. Usar Run All para ejecutar todo el notebook de corrido.

La primera vez que corras pip install, puede tardar un par de minutos porque descarga las librerías. En la clase, el proceso tomó 2 minutos con 19 segundos [4:30]. Ese tiempo depende de tu equipo y de tu conexión a internet. A partir de la segunda corrida, todo será mucho más rápido.

¿Qué ventajas tiene Jupyter frente a PgAdmin para consultas SQL?

PgAdmin es excelente para administrar bases de datos, pero Jupyter abre una puerta distinta: combina SQL con todo el ecosistema de Python.

  • Puedes fusionar resultados de varias consultas en un solo data frame.
  • Puedes visualizar con gráficas usando librerías como matplotlib o seaborn.
  • Puedes automatizar análisis que en PgAdmin tendrías que repetir manualmente.

Es el mismo SQL que ya conoces, pero con superpoderes encima. ¿Ya probaste conectar tu base de datos a Jupyter? Cuéntame en los comentarios qué consulta fue la primera que migraste.