Spaces:
Build error
Build error
| 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}") | |