En esta publicación explico como convertir el resultado de una consulta de una base de datos en MySQL o en MariaDB a un DataFrame. Para eso, vamos a suponer que tenemos una tabla en algún esquema por defecto de nuestra base de datos que sigue la siguiente estructura:
CREATE TABLE partido_de_futbol (
identificador INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
nombre_equipo_local VARCHAR(30) NOT NULL,
nombre_equipo_visitante VARCHAR(30) NOT NULL,
nombre_liga VARCHAR(30) NOT NULL,
fecha_de_juego DATETIME NOT NULL,
resultado VARCHAR(30) NULL
)
Antes de continuar, debemos instalar un par de bibliotecas de python: mysql-connector-python y sqlalchemy.
# Es mejor usar las versiones actualizadas de las bibliotecas entonces
# antes de instalar consulta las versiones aquí:
# https://pypi.org/project/mysql-connector-python/
# https://pypi.org/project/SQLAlchemy/
pip install mysql-connector-python==8.0.19 sqlalchemy==1.3.15
A continuación muestro como convertir una consulta sobre la tabla partido_de_futbol
en un DataFrame:
import pandas as pd
from sqlalchemy import create_engine
# Cambia los valores de estas variables por los valores reales de tu base
# de datos MySQL o MariaDB
usuario = 'admin'
contrasena = ''
url_servidor = 'localhost'
puerto = '3306'
esquema = 'default'
plugin_autenticacion = 'mysql_native_password'
# Creamos una cadena de conexión válida que incluye todas las variables
# declaradas arriba.
c_conexion = 'mysql+mysqlconnector://{0}:{1}@{2}:{3}/{4}?auth_plugin={5}'
c_conexion = c_conexion.format(usuario, contrasena, url_servidor, puerto,
esquema, plugin_autenticacion)
motor_mysql_mariadb = create_engine(c_conexion)
consulta_sql = '''
SELECT
-- Obtiene todos los partidos de fútbol que se jueguen en un día
-- en específico que se va a mandar como parametro.
*
FROM partido_de_futbol
WHERE DATE(fecha_de_juego) = %s
'''
# Las columnas de este DataFrame serán las columnas seleccionadas en la
# consulta SQL. En este caso, serían todas las columnas de la tabla
# partido_de_futbol: identificador, nombre_equipo_local, nombre_equipo_visitante,
# nombre_liga, fecha_de_juego y resultado
datos = pd.read_sql_query(
consulta_sql, motor_mysql_mariadb, params=['2020-03-28'])
Hay 3 parametros usados en el ejemplo:
sql: La consulta SQL que se va a ejecutar.
con: Un objeto conection
o engine
de SQLAlchemy
.
params: Una lista de parametros que substituiran los %s
en la consulta SQL.
Puedes consultar la documentación oficial para saber que otros parámetros te pueden ser útiles.
Nota: Estoy usando pandas 1.0.3
, pyhton 3.7
y un Macbook Pro 2015
.