Alquimia SQL Pandas
En este artículo, repasaremos la definición general de SQLAlchemy ORM, cómo se compara con un marco de datos de pandas y cómo podemos convertir un objeto SQLAlchemy ORM en un marco de datos de pandas. Sin embargo, asumimos que ya está familiarizado con la configuración de un DataFrame de pandas y una base de datos relacional para este artículo.
SQLAlchemy ORM
SQLAlchemy es un módulo que ayuda a mejorar la experiencia de comunicación entre un script de Python y la base de datos conectada al script. Este módulo se usa típicamente como una herramienta de mapeo relacional de objetos o ORM.
Un ORM esencialmente “traduce” las clases en un script de python. Con los ORM, podemos escribir consultas SQL simples para realizar acciones relacionadas con la base de datos.
Es a través de un ORM que, en un script de python, las clases se pueden convertir en una tabla SQL y las funciones se convierten en consultas. Por lo tanto, SQLAlchemy a menudo se conoce como un puente entre un script de python y una base de datos relacional.
Convierta un ORM de SQLAlchemy en un DataFrame
Estas funciones leerán la consulta SQL o la tabla en el objeto del marco de datos. La función read_sql()
delega el proceso a las funciones read_sql_query()
o read_sql_table()
, según los parámetros proporcionados a la función.
Estos son algunos de los parámetros que se utilizan normalmente en la función read_sql()
.
Parámetros | Descripción |
---|---|
nombre_tabla (cadena) |
Como sugiere el nombre, este es el nombre de la tabla de la base de datos. |
con (cadena) |
Normalmente contiene el URI de conexión de datos. |
esquema (cadena) |
Este parámetro contiene el nombre del esquema de la base de datos que se supone que debe consultarse. Si no hay un esquema para la base de datos, podemos establecer este parámetro en predeterminado , cuyo valor se establece en Ninguno . |
index_col (cadena/lista de cadenas) |
Estos son los índices o columnas. Estos son opcionales y se puede utilizar su valor predeterminado de Ninguno . |
coerce_float (bool) |
Este parámetro convierte valores que no son cadenas en valores de punto flotante. El valor predeterminado para este parámetro se establece en True . |
parse_dates (lista/dict) |
Esta es la lista de nombres de columnas que se pueden analizar como fechas. Su valor predeterminado se establece en Ninguno . |
columnas (lista) |
Este parámetro es una lista de nombres de columnas que se seleccionarán de una tabla de base de datos. El valor predeterminado para este parámetro se establece en Ninguno . |
tamaño trozo (int) |
Este parámetro es el número de filas para cada fragmento. Por lo general, se usa para ingresar una gran cantidad de datos simultáneamente. Si no es necesario establecerlo, podemos establecerlo en el valor predeterminado, que se establece en Ninguno . |
dtype (nombre del tipo de datos) |
Este parámetro puede ser un nombre de tipo de datos simple, int, bool, etc., o un diccionario de columnas con sus tipos de datos especificados. |
La sintaxis para todos estos métodos:
pandas.read_sql_query(
sql,
con,
index_col=None,
coerce_float=True,
params=None,
parse_dates=None,
chunksize=None,
dtype=None,
)
Por lo general, en los scripts de Python, usamos esta forma mucho más sencilla y simplificada de leer en una base de datos SQL:
data_frame_obj = pd.read_sql(query.statement, db_engine)
Esta línea de código anterior leerá la consulta definida en nuestro script de python y la leerá en nuestro objeto Dataframe.
Veamos este script de ejemplo para comprender mejor cómo podemos aplicar esto.
import pandas
import sqlalchemy as db
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
Base = declarative_base()
engine = db.create_engine(
"mysql+pymysql:\
//root:@localhost/jobs"
)
Session = sessionmaker(bind=engine)
session = Session()
class Jobs(Base):
__tablename__ = "jobs"
job_id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(50))
description = db.Column(db.String(50))
status = db.Column(db.String(10))
rows = [
Jobs(job_id=1, name="add", description="add data to database", status="pending"),
Jobs(
job_id=2, name="view", description="view data from database", status="pending"
),
Jobs(
job_id=3,
name="search",
description="search data from database",
status="pending",
),
]
dataFrame = pandas.DataFrame([vars(row) for row in rows])
dataFrame.to_sql("jobs", engine, if_exists="replace")
jobs_df = pandas.read_sql_query(sql=session.query(Jobs).statement, con=engine)
print(jobs_df)
Para ejecutar este script con éxito, debe asegurarse de tener instaladas las siguientes bibliotecas.
- pandas
- Alquimia SQL
- PyMySQL
- ventana acoplable
Una vez que haya configurado todas estas bibliotecas, ejecute el siguiente comando en la terminal de su elección para configurar su ventana acoplable:
docker run --name mysql-db -e MYSQL_ALLOW_EMPTY_PASSWORD=yes -p 3306:3306 -d mysql:5.6
A continuación, podemos ingresar a nuestro contenedor con este comando para crear la base de datos:
docker exec -it mysql-db mysql
Ejecutamos la consulta de creación de base de datos así:
create database jobs;
Ahora que nuestro entorno está configurado, podemos salir del contenedor y ejecutar nuestro script de python para obtener los siguientes resultados.
Producción:
Esto significa que hemos convertido con éxito nuestro SQLAlchemy ORM en un marco de datos de Pandas.
I am Fariba Laiq from Pakistan. An android app developer, technical content writer, and coding instructor. Writing has always been one of my passions. I love to learn, implement and convey my knowledge to others.
LinkedIn