Blog
Exploración de bases de datos en Python con SQLAlchemy
- Publicado por: Rafael Fernandez
- Categoría: Analisis de datos Blog Nivel Intermedio Python
Un analista de datos necesita interactuar con estructuras de datos complejas como las bases de datos relacionales. Dichas bases de datos, se basan en un modelo relacional de datos, las cuales consta de muchas tablas las cuales están enlazadas entre sí y representan un tipo de entidad. Cada fila representa una instancia del tipo Entidad y cada columna representa un atributo. En este sentido, una tabla es totalmente análoga a un Dataframe.
Creación de un motor de base de datos
Ahora queremos obtener nuestros datos usando SQL, es decir, lenguaje de consulta estructurado. Pero antes de eso tenemos que averiguar cómo conectarnos a una base de datos. Usaremos una base de datos SQLite porque es rápida y sencilla. Hay muchos paquetes como SQLite3 o SQLAlchemy que nos ayudan a acceder a la base de datos SQLite. Usaremos SQLAlchemy que trabaja con muchos Sistemas de Administración de Bases de Datos Relacionales.
SQLAlchemy proporciona una buena forma “pitónica” de interactuar con las bases de datos. Así que en lugar de tratar con las diferencias entre dialectos específicos de SQL tradicional como MySQL o PostgreSQL u Oracle, puede aprovechar el marco pitónico de SQLAlchemy para agilizar su flujo de trabajo y consultar sus datos de forma más eficiente. Vamos a trabajar con la ¿Empezamos?
Pasos para realizar una consulta de una base de datos en Python (Query en inglés)
El término Consulta significa obtener datos de una base de datos. Lo básico de la consulta SQL es ‘SELECT * de TableName’ donde TableName es el nombre de cualquiera de las tablas de la base de datos. Esta consulta devuelve todas las columnas de todas las filas de la tabla. Vamos ahora a explorar estas opciones mediante Python.
El primer paso consiste en importar el paquete de SQLAlchemy:
pip install sqlalchemy
A continuación creamos el motor de base de datos, utilizando la función create_engine() de la siguiente manera:
from sqlalchemy import create_engine # Utilizaremos la función create_engine() para encender el motor sql que comunicará nuestras consultas a la base de datos engine = create_engine('sqlite:///Chinook.sqlite') # Creamos el objeto conexión con = engine.connect() # Vamos a visualizar los nombres de las tablas que contiene la base de datos nombre_tabla = engine.table_names() print(nombre_tabla)
Una vez ya hemos conectado al motor, vamos a realizar la consulta mediante la función .execute () y guardamos dichos datos en Pytho
rs = con.execute("Select * from Album") # Vamos ahora a guardar los datos en un DataFrame import pandas como pd df = pd.DataFrame(rs.fetchall()) #fetchall devuelve todas las filas. #Para ver que todo está correcto mostraremos en pantalla los 10 primeros valores del Dataframe creado print(df.head())
Una vez ejecutado este comando, podemos comprobar que todas las filas se ven bien, pero los nombres de las columnas no son correctos. Para solucionar esto puede escribir abajo el comando antes de cerrar la conexión.
df.columns = rs.keys() # Chequeamos otra vez los nombres de las columnas df.head()
Es IMPORTANTE cerrar SIEMPRE la conexión de la siguiente forma:
con.close()
La consulta que se describe en esta lección es de tipo básica. Puede escribir consultas complejas en su lugar que contengan cláusulas como WHERE, JOIN, IF, etc. Puedes profundizar más sobre cómo tratar este tipo de estructuras en el curso…
La forma de consultar con Pandas
El mismo resultado también se puede obtener usando la función integrada de pandas llamada read_sql_query() pasando la consulta que se desea realizar y el motor al que se desea conectar.
engine = create_engine('sqlite:///Chinook.sqlite') df2 = pd.read_sql_query("Select * from Album",engine)
➡ Te invitamos a nuestro Curso Python de Análisis de Datos: