Spaces:
Build error
Build error
File size: 2,641 Bytes
a1ea7ff 3582fbc 33972db 3582fbc cfb1fec 3582fbc cfb1fec 3582fbc cfb1fec 3582fbc cfb1fec 33972db 3582fbc cfb1fec 33972db 3582fbc 33972db a1ea7ff cfb1fec 33972db cfb1fec 33972db cfb1fec 33972db cfb1fec 33972db cfb1fec 33972db cfb1fec 33972db cfb1fec |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
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}")
|