test_db / app.py
Yatheshr's picture
Create app.py
8f8328b verified
import streamlit as st
import openai
import pyodbc
import pandas as pd
# -----------------------------
# πŸ” 1. Configuration
# -----------------------------
openai.api_key = "YOUR_OPENAI_API_KEY"
# SQL Server connection string
server = 'dcdocstgdb01.dc68032.easn.morningstar.com'
database = 'DocumentAcquisition'
username = 'DocuUser'
password = 'StagTest@1'
conn_str = (
f"DRIVER={{ODBC Driver 17 for SQL Server}};"
f"SERVER={server};"
f"DATABASE={database};"
f"UID={username};"
f"PWD={password}"
)
# -----------------------------
# πŸ€– 2. Natural Language β†’ SQL
# -----------------------------
def generate_sql(nl_question):
prompt = f"""
You are a helpful assistant that converts user questions into SQL Server queries.
Question: "{nl_question}"
SQL Query:
"""
response = openai.ChatCompletion.create(
model="gpt-4", # or gpt-3.5-turbo
messages=[{"role": "user", "content": prompt}],
temperature=0
)
sql_query = response.choices[0].message["content"].strip()
return sql_query
# -----------------------------
# 🧠 3. Run SQL and return results
# -----------------------------
def run_query(sql_query):
try:
conn = pyodbc.connect(conn_str)
df = pd.read_sql(sql_query, conn)
conn.close()
return df
except Exception as e:
return str(e)
# -----------------------------
# πŸŽ›οΈ 4. Streamlit UI
# -----------------------------
st.title("🧠 GenAI SQL Server Q&A")
st.markdown("Ask a question in natural language. I’ll generate SQL and return the results from your database.")
user_question = st.text_input("πŸ“Œ Ask your question:")
if st.button("Submit") and user_question:
with st.spinner("Thinking..."):
sql_query = generate_sql(user_question)
st.code(sql_query, language="sql")
result = run_query(sql_query)
if isinstance(result, pd.DataFrame):
st.success("βœ… Results:")
st.dataframe(result)
else:
st.error(f"❌ Error:\n{result}")