SQL-DB / streamlit_app.py
Omkar1872's picture
Update streamlit_app.py
655b738 verified
# streamlit_app.py
import streamlit as st
import pandas as pd
from sqlalchemy import create_engine, text
import openai
import os
# ---- CONFIG ----
# Set your API key as an environment variable or in a .env file
openai.api_key = os.getenv("OPENAI_API_KEY")
# Database connection (update these with your credentials)
DB_TYPE = "mysql+pymysql"
DB_USER = "username"
DB_PASS = "password"
DB_HOST = "host"
DB_PORT = "3306"
DB_NAME = "db_name"
DATABASE_URL = f"{DB_TYPE}://{DB_USER}:{DB_PASS}@{DB_HOST}:{DB_PORT}/{DB_NAME}"
engine = create_engine(DATABASE_URL)
# ---- FUNCTIONS ----
def generate_sql(user_question, table_names=[]):
"""
Generates SQL query from user question using OpenAI GPT
"""
table_info = ""
if table_names:
table_info = f"These are your tables: {table_names}\n"
prompt = f"""
You are an expert SQL generator.
{table_info}
Write a SQL query that answers the following question:
\"\"\"{user_question}\"\"\"
Only return SQL, do not explain.
"""
response = openai.Completion.create(
engine="text-davinci-003",
prompt=prompt,
temperature=0,
max_tokens=300
)
sql_query = response.choices[0].text.strip()
return sql_query
def run_query(sql_query):
"""
Runs SQL query using SQLAlchemy
"""
try:
with engine.connect() as conn:
result = pd.read_sql(text(sql_query), conn)
return result
except Exception as e:
return f"Error executing query: {e}"
# ---- STREAMLIT UI ----
st.title("🧠 AI SQL Assistant")
st.markdown("Ask a question about your database, and it will generate SQL and show results.")
user_question = st.text_input("Enter your question:")
if st.button("Run Query") and user_question:
with st.spinner("Generating SQL..."):
sql_query = generate_sql(user_question)
st.code(sql_query, language="sql")
with st.spinner("Executing SQL..."):
result = run_query(sql_query)
if isinstance(result, pd.DataFrame):
st.success("Query executed successfully!")
st.dataframe(result)
else:
st.error(result)