VoiceSementle / postgresql.py
SJLee-0525
[TEST] test29
8374119
raw
history blame
3.18 kB
import os
from dotenv import load_dotenv
from sqlalchemy import create_engine, text
import pandas as pd
import gradio as gr
load_dotenv()
DATABASE_URL = os.getenv('DATABASE_URL')
engine = create_engine(DATABASE_URL)
def test_connection():
"""Test database connection and show basic info"""
try:
with engine.connect() as connection:
result = connection.execute(text("SELECT version()"))
version = result.scalar()
return f"โœ… ์—ฐ๊ฒฐ ์„ฑ๊ณต!\n๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฒ„์ „: {version}"
except Exception as e:
return f"โŒ ์—ฐ๊ฒฐ ์‹คํŒจ: {e}"
def get_all_puzzles():
"""Fetch all puzzles from database"""
try:
query = text("SELECT * FROM puzzles ORDER BY puzzle_number")
df = pd.read_sql_query(query, engine)
return df
except Exception as e:
return pd.DataFrame({"error": [str(e)]})
def get_puzzle_by_difficulty(difficulty):
"""Fetch puzzles filtered by difficulty"""
try:
if difficulty == "์ „์ฒด":
query = text("SELECT * FROM puzzles ORDER BY puzzle_number")
df = pd.read_sql_query(query, engine)
else:
query = text("SELECT * FROM puzzles WHERE difficulty = :difficulty ORDER BY puzzle_number")
df = pd.read_sql_query(query, engine, params={"difficulty": difficulty})
return df
except Exception as e:
return pd.DataFrame({"error": [str(e)]})
def get_table_count():
"""Get total count of puzzles"""
try:
query = text("SELECT COUNT(*) FROM puzzles")
with engine.connect() as connection:
result = connection.execute(query)
count = result.scalar()
return f"์ „์ฒด ํผ์ฆ ๊ฐœ์ˆ˜: {count}๊ฐœ"
except Exception as e:
return f"์˜ค๋ฅ˜: {e}"
with gr.Blocks(title="Puzzles DB ํ…Œ์ŠคํŠธ") as demo:
gr.Markdown("# ๐Ÿงฉ Puzzles ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ํ…Œ์ŠคํŠธ")
with gr.Row():
with gr.Column():
test_btn = gr.Button("์—ฐ๊ฒฐ ํ…Œ์ŠคํŠธ", variant="primary")
connection_status = gr.Textbox(label="์—ฐ๊ฒฐ ์ƒํƒœ", lines=3)
with gr.Column():
count_btn = gr.Button("๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜ ํ™•์ธ")
count_output = gr.Textbox(label="๊ฐœ์ˆ˜")
gr.Markdown("## ์ „์ฒด ๋ฐ์ดํ„ฐ ์กฐํšŒ")
load_all_btn = gr.Button("๋ชจ๋“  ํผ์ฆ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ")
all_data = gr.Dataframe(label="์ „์ฒด ํผ์ฆ ๋ฐ์ดํ„ฐ")
gr.Markdown("## ๋‚œ์ด๋„๋ณ„ ํ•„ํ„ฐ๋ง")
difficulty_filter = gr.Dropdown(
["์ „์ฒด", "easy", "medium", "hard"],
value="์ „์ฒด",
label="๋‚œ์ด๋„ ์„ ํƒ"
)
filter_btn = gr.Button("ํ•„ํ„ฐ ์ ์šฉ")
filtered_data = gr.Dataframe(label="ํ•„ํ„ฐ๋ง๋œ ๋ฐ์ดํ„ฐ")
# Event handlers
test_btn.click(test_connection, outputs=connection_status)
count_btn.click(get_table_count, outputs=count_output)
load_all_btn.click(get_all_puzzles, outputs=all_data)
filter_btn.click(get_puzzle_by_difficulty, inputs=difficulty_filter, outputs=filtered_data)
difficulty_filter.change(get_puzzle_by_difficulty, inputs=difficulty_filter, outputs=filtered_data)
if __name__ == "__main__":
demo.launch()