零代码玩转数据库!Gradio可视化SQLite管理神器
以下是一个使用 Gradio 管理 SQLite 数据库的完整实现方案:
import gradio as gr
import sqlite3
import pandas as pd
# 初始化数据库和表结构
def init_db():
conn = sqlite3.connect('users.db')
c = conn.cursor()
c.execute('''
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
age INTEGER,
email TEXT
)
''')
conn.commit()
conn.close()
init_db()
# 数据库操作函数
def add_user(name, age, email):
try:
conn = sqlite3.connect('users.db')
c = conn.cursor()
c.execute("INSERT INTO users (name, age, email) VALUES (?, ?, ?)", (name, age, email))
conn.commit()
df = pd.read_sql_query("SELECT * FROM users", conn)
return "用户添加成功!", df
except Exception as e:
return f"错误:{str(e)}", None
finally:
conn.close()
def delete_user(user_id):
try:
conn = sqlite3.connect('users.db')
c = conn.cursor()
c.execute("DELETE FROM users WHERE id = ?", (user_id,))
conn.commit()
df = pd.read_sql_query("SELECT * FROM users", conn)
return f"删除成功,受影响行数:{c.rowcount}", df
except Exception as e:
return f"错误:{str(e)}", None
finally:
conn.close()
def update_user(user_id, new_name, new_age, new_email):
try:
conn = sqlite3.connect('users.db')
c = conn.cursor()
# 获取原数据
c.execute("SELECT name, age, email FROM users WHERE id = ?", (user_id,))
result = c.fetchone()
if not result:
return "用户不存在", pd.DataFrame()
# 合并新旧数据
name = new_name if new_name else result[0]
age = new_age if new_age else result[1]
email = new_email if new_email else result[2]
# 执行更新
c.execute("""
UPDATE users
SET name=?, age=?, email=?
WHERE id=?
""", (name, age, email, user_id))
conn.commit()
df = pd.read_sql_query("SELECT * FROM users", conn)
return "更新成功", df
except Exception as e:
return f"错误:{str(e)}", None
finally:
conn.close()
def load_users():
try:
conn = sqlite3.connect('users.db')
df = pd.read_sql_query("SELECT * FROM users", conn)
return df
except Exception as e:
return pd.DataFrame()
finally:
conn.close()
# 创建 Gradio 界面
with gr.Blocks(title="数据库管理系统") as demo:
gr.Markdown("## SQLite 数据库管理工具")
with gr.Tab(" 添加记录"):
with gr.Row():
name_input = gr.Textbox(label="姓名", placeholder="请输入姓名")
age_input = gr.Number(label="年龄", placeholder="请输入年龄")
email_input = gr.Textbox(label="邮箱", placeholder="请输入邮箱")
add_btn = gr.Button("提交添加")
add_output = gr.Textbox(label="操作结果")
with gr.Tab(" 修改记录"):
with gr.Row():
update_id = gr.Number(label="用户ID")
new_name = gr.Textbox(label="新姓名")
new_age = gr.Number(label="新年龄")
new_email = gr.Textbox(label="新邮箱")
update_btn = gr.Button("提交修改")
update_output = gr.Textbox(label="操作结果")
with gr.Tab(" 删除记录"):
with gr.Row():
delete_id = gr.Number(label="要删除的用户ID")
delete_btn = gr.Button("确认删除")
delete_output = gr.Textbox(label="操作结果")
with gr.Tab(" 浏览数据"):
refresh_btn = gr.Button("刷新数据")
data_table = gr.DataFrame(
headers=["ID", "姓名", "年龄", "邮箱"],
datatype=["number", "str", "number", "str"],
label="用户数据表",
interactive=True
)
# 事件绑定
add_btn.click(
add_user,
inputs=[name_input, age_input, email_input],
outputs=[add_output, data_table]
)
delete_btn.click(
delete_user,
inputs=delete_id,
outputs=[delete_output, data_table]
)
update_btn.click(
update_user,
inputs=[update_id, new_name, new_age, new_email],
outputs=[update_output, data_table]
)
refresh_btn.click(
load_users,
outputs=data_table
)
# 启动应用
if __name__ == "__main__":
demo.launch()
功能特性:
- 四大核心功能:
- 添加用户记录
- 修改现有记录
- 删除指定记录
- 浏览全部数据
- 智能数据更新:
- 每次增删改操作后自动刷新数据表格
- 支持手动刷新按钮获取最新数据
- 人性化交互设计:
- 使用 Tab 分隔不同功能模块
- 支持部分字段更新(留空字段保持原值)
- 自动生成递增ID(无需手动输入)
- 健壮的错误处理:
- 捕捉并显示数据库操作异常
- 自动处理空值和非空约束
- 直观数据展示:
- 表格形式展示数据
- 自动识别数据类型(数字/字符串)
使用说明:
- 首次运行会自动创建数据库文件(users.db)
- 在对应标签页填写信息执行操作:
- 添加:填写所有字段后点击"提交添加"
- 修改:输入用户ID和需要修改的字段
- 删除:输入要删除的用户ID
- 通过"浏览数据"标签页查看当前数据
- 所有操作结果会在对应模块下方显示
该方案通过 Gradio 实现了对 SQLite 数据库的完整 CRUD 操作,界面直观友好,适合需要快速构建简单数据库管理系统的场景。