Slit_Dyanamic_Dashboard / src /streamlit_app.py
Balaprime's picture
Update src/streamlit_app.py
cfb1fec verified
import streamlit as st
import pandas as pd
import sqlite3
import os
from database import initialize_database
# Initialize database (set clear_data=True to reset data)
initialize_database(clear_data=False)
# Database path
db_path = os.path.abspath(os.path.join(os.path.dirname(__file__), "../college.db"))
# App layout
st.set_page_config(page_title="College Dashboard", layout="wide")
st.title("πŸ“Š College Dynamic Dashboard")
# Sidebar: select table
table = st.sidebar.selectbox("Select Table", ["student", "employee", "course"])
# Load data function
def load_data(table):
conn = sqlite3.connect(db_path)
df = pd.read_sql_query(f"SELECT * FROM {table}", conn)
conn.close()
return df
# Filter data function
def filter_data(df):
col = st.sidebar.selectbox("Select column to filter", df.columns)
unique_values = df[col].dropna().unique().tolist()
selected = st.sidebar.multiselect(f"Filter {col}", unique_values, default=unique_values)
if selected:
return df[df[col].isin(selected)]
return df
# Load and filter data
df = load_data(table)
filtered_df = filter_data(df)
# Display filtered data
st.subheader(f"πŸ“„ {table.capitalize()} Table")
st.dataframe(filtered_df, use_container_width=True)
# Quick insights & charts
st.markdown("### πŸ“ˆ Quick Insights")
if table == "student":
st.metric("Total Students", len(filtered_df))
if "major" in filtered_df.columns:
st.bar_chart(filtered_df['major'].value_counts())
elif table == "employee":
st.metric("Total Employees", len(filtered_df))
if "department" in filtered_df.columns:
st.bar_chart(filtered_df['department'].value_counts())
elif table == "course":
st.metric("Total Courses", len(filtered_df))
if "semester" in filtered_df.columns:
st.bar_chart(filtered_df['semester'].value_counts())
# Custom SQL query
st.markdown("### πŸ” Run Custom SQL Query")
sql_query = st.text_area("Enter your SQL Query below:", height=150)
if st.button("Execute Query"):
# Basic SQL safety check
restricted_keywords = ["drop", "delete", "update", "insert", "alter", "create", "pragma"]
if any(keyword in sql_query.lower() for keyword in restricted_keywords):
st.warning("🚫 Restricted SQL keywords detected. Only SELECT queries are allowed.")
else:
try:
conn = sqlite3.connect(db_path)
result_df = pd.read_sql_query(sql_query, conn)
conn.close()
st.success("βœ… Query executed successfully.")
st.dataframe(result_df, use_container_width=True)
except Exception as e:
st.error(f"❌ Error: {e}")