|
import gradio as gr |
|
import sqlite3 |
|
import pandas as pd |
|
|
|
|
|
db_file = "attendance_records.db" |
|
|
|
|
|
def get_table_names(): |
|
"""Retrieve the names of all tables in the database.""" |
|
conn = sqlite3.connect(db_file) |
|
cursor = conn.cursor() |
|
cursor.execute(""" |
|
SELECT name FROM sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite_%'; |
|
""") |
|
tables = [row[0] for row in cursor.fetchall()] |
|
conn.close() |
|
return tables |
|
|
|
def query_table(table_name): |
|
"""Query the selected table and return its content as a DataFrame.""" |
|
conn = sqlite3.connect(db_file) |
|
try: |
|
df = pd.read_sql_query(f"SELECT * FROM {table_name}", conn) |
|
except Exception as e: |
|
conn.close() |
|
return str(e) |
|
conn.close() |
|
return df |
|
|
|
def display_table(table_name): |
|
"""Fetch and display the contents of the selected table.""" |
|
df = query_table(table_name) |
|
if isinstance(df, pd.DataFrame): |
|
return df |
|
else: |
|
return f"Error fetching data: {df}" |
|
|
|
|
|
def create_gradio_app(): |
|
with gr.Blocks() as app: |
|
gr.Markdown("# Database Query Interface") |
|
gr.Markdown("### Select a table to view its contents") |
|
|
|
table_selector = gr.Dropdown(choices=get_table_names(), label="Select Table") |
|
output = gr.Dataframe(label="Table Data", interactive=False) |
|
|
|
table_selector.change( |
|
fn=display_table, |
|
inputs=table_selector, |
|
outputs=output, |
|
) |
|
|
|
return app |
|
|
|
|
|
app = create_gradio_app() |
|
app.launch() |
|
|