File size: 3,178 Bytes
8374119 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
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() |