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.
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 |
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 |
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.
pd.read_sql("SELECT * FROM tabla", conn). Hacé SELECT con WHERE,
GROUP BY y LIMIT para traer lo necesario.
sqlalchemy + psycopg2, (3) ejecutar queries, (4)
explorar en pandas, (5) generar visualizaciones y presentar. Todo en un mismo flujo, de forma reproducible.
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.
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.
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).
Hacé clic en ▶ Ejecutar
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.
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.
Hacé clic en ▶ Ejecutar
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() |
Ejercicios
Ejercicio 1: Crear tabla y consultar
Creá una tabla SQL con to_sql y leéla con read_sql. Debe incluir CABA.
Hacé clic en ▶ Ejecutar
Ejercicio 2: SELECT con WHERE
Consultá los clientes de Rosario. Debe incluir Rosario.
Hacé clic en ▶ Ejecutar
Ejercicio 3: COUNT y SUM en SQL
Contá cuántas transacciones hay y sumá los montos con SQL. Debe incluir total.
Hacé clic en ▶ Ejecutar
Ejercicio 4: JOIN en SQL → DataFrame
Hacé un JOIN entre clientes y transacciones. Imprimí el DataFrame resultante. Debe incluir
ciudad.
Hacé clic en ▶ Ejecutar
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 %.
Hacé clic en ▶ Ejecutar
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.
Hacé clic en ▶ Ejecutar
Ejercicio 7: Query parametrizada
Usá una query con parámetro ? para filtrar por una ciudad específica. Debe incluir
Córdoba.
Hacé clic en ▶ Ejecutar
Ejercicio 8: SQL → pandas → estadísticas
Extraé datos con SQL, luego calculá media, mediana y percentil 90 en pandas. Debe incluir P90.
Hacé clic en ▶ Ejecutar
Ejercicio 9: Pipeline SQL → pandas → gráfico
Extraé ventas mensuales con SQL, luego graficá la tendencia. Imprimí Pipeline OK.
Hacé clic en ▶ Ejecutar
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.
Hacé clic en ▶ Ejecutar
Resumen y conexión
pd.read_sql(query, conn)es el puente entre SQL y pandas — ejecuta queries y devuelve DataFrames.df.to_sql("tabla", conn)guarda DataFrames como tablas SQL.- Regla de oro: filtrá en SQL, analizá en pandas. No traigas millones de filas si solo necesitás un resumen.
- Usá queries parametrizadas (
?) para evitar SQL injection. sqlite3viene incluida en Python — perfecta para aprender y prototipar.- En producción se usa
sqlalchemycomo capa de abstracción universal.
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.