Natual_Language-to-SQL-Qwen2.5-3B-FineTuned / pages /3 📂File Upload for SQL.py
DebopamC's picture
Upload 20 files
fae86c5 verified
import streamlit as st
import pandas as pd
from utils.sql_utils import create_schema
MAX_FILES = 5
if "uploaded_dataframes" not in st.session_state:
st.session_state.uploaded_dataframes = {}
st.header("Upload your CSV or Excel files")
st.caption("Maximum 5 files can be uploaded.")
num_uploaded_files = len(st.session_state.uploaded_dataframes)
disabled = num_uploaded_files >= MAX_FILES
uploaded_files = st.file_uploader(
"Choose files",
type=["csv", "xlsx"],
accept_multiple_files=True,
disabled=disabled,
)
if uploaded_files and not disabled:
uploaded_count = 0
for uploaded_file in uploaded_files:
if len(st.session_state.uploaded_dataframes) < MAX_FILES:
df = None
try:
if uploaded_file.name.endswith(".csv"):
df = pd.read_csv(uploaded_file)
elif uploaded_file.name.endswith(".xlsx"):
df = pd.read_excel(uploaded_file)
if uploaded_file.name in st.session_state.uploaded_dataframes:
st.toast(
f"File {uploaded_file.name} already uploaded. Skipping...",
icon="⚠️",
)
else:
key = (
uploaded_file.name.lower()
.strip()
.replace(" ", "_")
.replace(".csv", "")
.replace(".xlsx", "")
)
st.session_state.uploaded_dataframes[key] = df
uploaded_count += 1
print(f"Uploaded file: {str(uploaded_file.name)}")
except Exception as e:
st.error(f"Error reading file {uploaded_file.name}: {e}")
else:
st.warning(
f"Maximum number of files({MAX_FILES}) reached. Cannot upload more files."
)
break
if uploaded_count > 0:
st.success(
f"{uploaded_count} File(s) uploaded successfully. Total {len(st.session_state.uploaded_dataframes)} File(s)"
)
if len(st.session_state.uploaded_dataframes) >= MAX_FILES:
st.warning(
f"Maximum number of files({MAX_FILES}) reached. Cannot upload more files."
)
dataframes = st.session_state.uploaded_dataframes
if dataframes:
st.header("Schema of Uploaded Files📚")
schema = create_schema(dataframes)
if "uploaded_df_schema" not in st.session_state:
st.session_state.uploaded_df_schema = schema
pretty_schema, markdown = st.tabs(["Schema", "Copy Schema in Markdown"])
with pretty_schema:
st.info(
"You can copy this schema, and give it to any state of the art LLM models like (Gemini /ChatGPT /Claude etc) to cross check your answers.\n You can run the queries directly here, by using ***Manual Query Executer*** in the sidebar and download your results 😊",
icon="ℹ️",
)
st.markdown(schema, unsafe_allow_html=True)
with markdown:
st.info(
"You can copy this schema, and give it to any state of the art LLM models like (Gemini /ChatGPT /Claude etc) to cross check your answers.\n You can run the queries directly here, by using ***Manual Query Executer*** in the sidebar and download your results 😊",
icon="ℹ️",
)
st.markdown(f"```\n{schema}\n```")