Integración de Bases de Datos en Aplicaciones de Streamlit

La integración de bases de datos en una aplicación de Streamlit permite a los usuarios interactuar con una base de datos en tiempo real a través de una interfaz intuitiva y fácil de usar. Con Streamlit, es posible crear aplicaciones web personalizadas para acceder a datos almacenados en una base de datos y presentarlos en una forma atractiva y significativa.

Selección y Configuración de la Base de Datos

Para integrar una base de datos en una aplicación de Streamlit, se debe elegir una base de datos y configurar la conexión de la aplicación web a ella. Las opciones de base de datos incluyen PostgreSQL, MySQL, MongoDB y SQLite.

Manipulación y Consulta de Datos

Una vez conectado a la base de datos, se puede utilizar SQL para consultar y filtrar los datos, así como agregar, actualizar o eliminar los registros.

Visualización de Datos

Streamlit proporciona herramientas para crear visualizaciones interactivas, como gráficos y tablas, para presentar los datos de manera efectiva.

Interacción del Usuario

Además, la plataforma permite que los usuarios de la aplicación interactúen con la base de datos mediante la introducción de datos nuevos o la edición de datos existentes.

Beneficios de la Integración de la Base de Datos

La integración de la base de datos en la aplicación de Streamlit puede mejorar la calidad y la accesibilidad de los datos, mejorando la toma de decisiones y la productividad de aquellos que dependen de la información para realizar sus trabajos diarios.

Integración de Bases de Datos en Aplicaciones de Streamlit

La integración de bases de datos en una aplicación de Streamlit es un proceso esencial si deseamos construir una aplicación en la que se requiera almacenamiento y gestión de datos.

  1. Seleccionar una base de datos

    Hay varias opciones, como MySQL, PostgreSQL, SQLite, MongoDB, entre otras. La elección dependerá de las necesidades específicas del proyecto.

  2. Conectar la base de datos

    Una vez que se haya seleccionado la base de datos, es necesario conectarse a ella desde la aplicación de Streamlit. Para esto, la librería elegida para manejar la base de datos ofrece un conjunto de herramientas para hacer esto de manera eficiente.

  3. Crear las consultas SQL

    Las consultas SQL permiten interactuar con la base de datos y realizar operaciones de consulta y modificación de los datos según se quiera. Para crear estas consultas, se deben tener conocimientos en SQL y en las funciones específicas de la base de datos elegida.

  4. Actualizar la aplicación de Streamlit

    Después de conectarse a la base de datos y crear las consultas SQL, se debe asegurar que la aplicación de Streamlit pueda integrar y mostrar los datos que se obtengan de la base de datos.

En términos generales, integrar una base de datos en una aplicación de Streamlit es una tarea sencilla gracias a la variedad de librerías que se ofrecen para el acceso y manipulación de bases de datos. Esto permite que cualquier aplicación creada con Streamlit pueda fácilmente integrar y manejar datos de manera eficiente.

Creación de Base de Datos

Este código nos va a generar un base de datos


import sqlite3

def create_database():
    # Conectar a la base de datos (se creará si no existe)
    conn = sqlite3.connect('mi_base_de_datos.db')
    cursor = conn.cursor()

    # Crear la tabla 'clientes'
    cursor.execute('''
        CREATE TABLE IF NOT EXISTS clientes (
            id_cliente INTEGER PRIMARY KEY AUTOINCREMENT,
            nombre_cliente TEXT NOT NULL,
            fecha_creacion TEXT NOT NULL,
            tipo_cliente TEXT NOT NULL
        )
    ''')

    # Crear la tabla 'compras'
    cursor.execute('''
        CREATE TABLE IF NOT EXISTS compras (
            id_compra INTEGER PRIMARY KEY AUTOINCREMENT,
            id_cliente INTEGER NOT NULL,
            nombre_item TEXT NOT NULL,
            fecha_compra TEXT NOT NULL,
            precio_venta REAL NOT NULL,
            descuento REAL NOT NULL,
            FOREIGN KEY (id_cliente) REFERENCES clientes(id_cliente)
        )
    ''')

    # Confirmar los cambios y cerrar la conexión
    conn.commit()
    conn.close()

if __name__ == '__main__':
    create_database()
    print("Base de datos y tablas creadas exitosamente.")

 

Simular Datos

Este código nos va a ayudar a simular los datos


import sqlite3
from faker import Faker
import random
from datetime import datetime, timedelta

def generate_dummy_data():
    # Conectar a la base de datos
    conn = sqlite3.connect('mi_base_de_datos.db')
    cursor = conn.cursor()
    fake = Faker()

    # Generar datos dummy para la tabla 'clientes'
    clientes = []
    for _ in range(100):
        nombre_cliente = fake.name()
        fecha_creacion = fake.date_between(start_date='-5y', end_date='today').strftime('%Y-%m-%d')
        tipo_cliente = random.choice(['Regular', 'Premium', 'VIP'])
        clientes.append((nombre_cliente, fecha_creacion, tipo_cliente))

    cursor.executemany('''
        INSERT INTO clientes (nombre_cliente, fecha_creacion, tipo_cliente)
        VALUES (?, ?, ?)
    ''', clientes)

    # Obtener los ids de los clientes insertados
    cursor.execute('SELECT id_cliente FROM clientes')
    cliente_ids = [row[0] for row in cursor.fetchall()]

    # Generar datos dummy para la tabla 'compras'
    compras = []
    for _ in range(1000):
        id_cliente = random.choice(cliente_ids)
        nombre_item = fake.word()
        fecha_compra = fake.date_between(start_date='-5y', end_date='today').strftime('%Y-%m-%d')
        precio_venta = round(random.uniform(5.0, 500.0), 2)
        descuento = round(random.uniform(0.0, 50.0), 2)
        compras.append((id_cliente, nombre_item, fecha_compra, precio_venta, descuento))

    cursor.executemany('''
        INSERT INTO compras (id_cliente, nombre_item, fecha_compra, precio_venta, descuento)
        VALUES (?, ?, ?, ?, ?)
    ''', compras)

    # Confirmar los cambios y cerrar la conexión
    conn.commit()
    conn.close()

if __name__ == '__main__':
    generate_dummy_data()
    print("Datos dummy generados exitosamente.")

Integración de Bases de Datos en una Aplicación de Streamlit en Python

Supongamos que tenemos dos tablas de bases de datos diferentes, una con información del cliente y otra con información de compras. El objetivo es crear una aplicación de Streamlit para que los usuarios puedan buscar información de sus compras, y poder ver la información de los clientes relacionados con esa compra.

  1. Importar las bibliotecas necesarias

    Primero, importamos las bibliotecas necesarias de Python:

    import streamlit as st
    import pandas as pd
    import sqlite3
  2. Crear la conexión a la base de datos

    Luego, creamos la conexión a la base de datos que queremos integrar en nuestra aplicación:

    conn = sqlite3.connect('base_datos.db')
  3. Seleccionar y cargar las tablas

    Ahora, seleccionamos las tablas específicas que queremos utilizar y las cargamos en pandas dataframes:

    query_clientes = "SELECT * FROM clientes"
    df_clientes = pd.read_sql(query_clientes, conn)
    query_compras = "SELECT * FROM compras"
    df_compras = pd.read_sql(query_compras, conn)
  4. Agregar funcionalidad de búsqueda

    Agregamos la funcionalidad de búsqueda en nuestra aplicación a través de Interacciones de Streamlit:

    st.title('Búsqueda de información de compras')
    st.write('Ingrese el ID de la compra a buscar:')
    cod_compra = st.text_input(label='Código de compra')
    if st.button('Buscar'):
        df_compra_filtrado = df_compras.loc[df_compras['id_compra'] == int(cod_compra)]
        if not df_compra_filtrado.empty:
            df_cliente_filtrado = df_clientes.loc[df_clientes['id_cliente'] == df_compra_filtrado.iloc[0]['id_cliente']]
            st.write(f"ID Compra: {df_compra_filtrado.iloc[0]['id_compra']}")
            st.write(f"Fecha compra: {df_compra_filtrado.iloc[0]['fecha']}")
            st.write(f"ID Cliente: {df_cliente_filtrado.iloc[0]['id_cliente']}")
            st.write(f"Nombre Cliente: {df_cliente_filtrado.iloc[0]['nombre']} {df_cliente_filtrado.iloc[0]['apellido']}")
        else:
            st.warning('Código de compra no encontrado.')