QuieroProgramar por Rodri Gonzalez
Data Analysis · Lección 17 de 19

Integración SQL + Python

Ya dominás SQL para consultar bases de datos y Python/pandas para analizar datos. Ahora aprendé a conectar ambos mundos: ejecutar queries SQL desde Python, cargar resultados directamente en DataFrames y escribir pipelines automatizados que combinen lo mejor de cada tecnología.

90–120 min Prerrequisitos: SQL (sección completa) + pandas
01

Concepto teórico

¿Por qué integrar SQL + Python?

SQL es excelente para extraer y filtrar datos de millones de filas en el servidor. Python es excelente para análisis estadístico, visualización y ML en tu máquina local. La integración te da lo mejor de ambos:

Tarea Mejor herramienta ¿Por qué?
Filtrar millones de filas SQL El motor SQL está optimizado para esto
JOINs complejos SQL Indexado del servidor es mucho más rápido
Análisis estadístico Python scipy, statsmodels, pandas
Visualización Python matplotlib, seaborn
Machine Learning Python scikit-learn, TensorFlow
Automatizar reportes Python Scripts programables
Data cleaning complejo Python pandas es más flexible que SQL procesales
Analogía del restaurante: SQL es la cocina — tiene los hornos industriales, las heladeras con toda la materia prima, puede servir 1000 platos. Python es el sommelier — toma el plato ya preparado (los datos filtrados) y le agrega el toque final: maridaje con vino (visualización), evaluación de calidad (estadísticas), y la recomendación al comensal (el insight). Cada uno en lo suyo.

Las librerías de conexión

Librería Base de datos Tipo
sqlite3 SQLite Incluida en Python (no necesita instalar)
psycopg2 PostgreSQL Más usada en producción
pymysql MySQL/MariaDB Empresas legacy
pyodbc SQL Server Ecosistema Microsoft
sqlalchemy Cualquiera (ORM) Capa de abstracción universal
El flujo estándar:
1. conn = sqlite3.connect("mi_base.db") → abrir conexión
2. df = pd.read_sql("SELECT ...", conn) → query → DataFrame
3. Analizar, visualizar, modelar con pandas/seaborn/sklearn
4. (Opcional) df.to_sql("tabla", conn) → guardar resultados de vuelta
5. conn.close() → cerrar conexión

pd.read_sql(): el puente mágico

Esta función es la llave maestra: ejecuta una query SQL y devuelve el resultado directamente como DataFrame de pandas. Todo lo que sabés de SQL funciona dentro del string de la query.

Regla de oro: filtrá y agregá en SQL lo que puedas, y traé a Python solo los datos que vas a analizar. Si tu base tiene 50 millones de filas, no hagas pd.read_sql("SELECT * FROM tabla", conn). Hacé SELECT con WHERE, GROUP BY y LIMIT para traer lo necesario.
En el trabajo real: el día a día de un Data Analyst es: (1) abrir Jupyter Notebook, (2) conectarse al data warehouse con sqlalchemy + psycopg2, (3) ejecutar queries, (4) explorar en pandas, (5) generar visualizaciones y presentar. Todo en un mismo flujo, de forma reproducible.
02

Ejemplos explicados paso a paso

Ejemplo 1: Crear una base SQLite y cargar datos desde pandas

SQLite está incluida en Python — no necesitás instalar nada. Es perfecta para aprender y para proyectos locales.

ejemplo_01_crear_db.pyPython

        
Hacé clic en ▶ Ejecutar

Ejemplo 2: pd.read_sql() — ejecutar queries y obtener DataFrames

El flujo principal: escribís SQL, obtenés un DataFrame. Lo mejor de los dos mundos.

ejemplo_02_read_sql.pyPython

        
Hacé clic en ▶ Ejecutar

Ejemplo 3: SQL para filtrar + pandas para analizar

El patrón profesional: dejá que SQL haga el trabajo pesado (filtrar, JOINs), y usá pandas para lo que hace mejor (estadísticas, EDA).

ejemplo_03_sql_pandas.pyPython

        
Hacé clic en ▶ Ejecutar
Tip pro — queries parametrizadas: nunca concatená variables en un string SQL (f"WHERE id = {id}") — es vulnerable a SQL injection. Usá parámetros: pd.read_sql("SELECT * FROM t WHERE id = ?", conn, params=[id]).

Ejemplo 4: Guardar resultados de vuelta en SQL

Después de procesar datos en pandas, podés guardar los resultados en una tabla SQL para que otros los consuman.

ejemplo_04_to_sql.pyPython

        
Hacé clic en ▶ Ejecutar

Ejemplo 5: Pipeline completo — SQL → pandas → visualización

Un pipeline de análisis real: extraer de SQL, procesar en pandas, visualizar con matplotlib.

ejemplo_05_pipeline.pyPython

        
Hacé clic en ▶ Ejecutar
03

Referencia rápida

Operación Código
Conectar (SQLite) conn = sqlite3.connect("base.db")
Conectar en memoria conn = sqlite3.connect(":memory:")
Query → DataFrame pd.read_sql("SELECT ...", conn)
Query parametrizada pd.read_sql("... WHERE id=?", conn, params=[id])
DataFrame → SQL df.to_sql("tabla", conn, if_exists="replace")
Listar tablas pd.read_sql("SELECT name FROM sqlite_master WHERE type='table'", conn)
Cerrar conexión conn.close()
04

Ejercicios

Nivel 1 · Básico

Ejercicio 1: Crear tabla y consultar

Creá una tabla SQL con to_sql y leéla con read_sql. Debe incluir CABA.

ejercicio_01.pyDebe incluir "CABA"

          
Hacé clic en ▶ Ejecutar
Nivel 1 · Básico

Ejercicio 2: SELECT con WHERE

Consultá los clientes de Rosario. Debe incluir Rosario.

ejercicio_02.pyDebe incluir "Rosario"

          
Hacé clic en ▶ Ejecutar
Nivel 1 · Básico

Ejercicio 3: COUNT y SUM en SQL

Contá cuántas transacciones hay y sumá los montos con SQL. Debe incluir total.

ejercicio_03.pyDebe incluir "total"

          
Hacé clic en ▶ Ejecutar
Nivel 2 · Intermedio

Ejercicio 4: JOIN en SQL → DataFrame

Hacé un JOIN entre clientes y transacciones. Imprimí el DataFrame resultante. Debe incluir ciudad.

ejercicio_04.pyDebe incluir "ciudad"

          
Hacé clic en ▶ Ejecutar
Nivel 2 · Intermedio

Ejercicio 5: GROUP BY en SQL + análisis en pandas

Hacé GROUP BY por ciudad en SQL, luego calculá el % de participación en pandas. Debe incluir %.

ejercicio_05.pyDebe incluir "%"

          
Hacé clic en ▶ Ejecutar
Nivel 2 · Intermedio

Ejercicio 6: Guardar resultados con to_sql

Calculá un resumen en pandas y guardálo como nueva tabla SQL. Verificá leyéndolo. Debe incluir resumen.

ejercicio_06.pyDebe incluir "resumen"

          
Hacé clic en ▶ Ejecutar
Nivel 3 · Avanzado

Ejercicio 7: Query parametrizada

Usá una query con parámetro ? para filtrar por una ciudad específica. Debe incluir Córdoba.

ejercicio_07.pyDebe incluir "Córdoba"

          
Hacé clic en ▶ Ejecutar
Nivel 3 · Avanzado

Ejercicio 8: SQL → pandas → estadísticas

Extraé datos con SQL, luego calculá media, mediana y percentil 90 en pandas. Debe incluir P90.

ejercicio_08.pyDebe incluir "P90"

          
Hacé clic en ▶ Ejecutar
Nivel 3 · Avanzado

Ejercicio 9: Pipeline SQL → pandas → gráfico

Extraé ventas mensuales con SQL, luego graficá la tendencia. Imprimí Pipeline OK.

ejercicio_09.pyDebe imprimir "Pipeline OK"

          
Hacé clic en ▶ Ejecutar
Nivel 4 · Desafío

Ejercicio 10: Pipeline completo con 2 tablas

Creá 2 tablas (clientes + ventas), hacé JOIN en SQL, calculá métricas por segmento en pandas, y guardá el resultado como nueva tabla. Debe incluir Pipeline completo.

ejercicio_10_desafio.pyDebe imprimir "Pipeline completo"

          
Hacé clic en ▶ Ejecutar
05

Resumen y conexión

En la siguiente lección (18 · Portfolio y proyecto final) vas a aplicar todo lo aprendido en un proyecto completo de Data Analysis, construyendo tu portfolio profesional.