零代码玩转数据库!Gradio可视化SQLite管理神器

yumo6663个月前 (04-07)技术文章16

以下是一个使用 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()

功能特性:

  1. 四大核心功能:
  2. 添加用户记录
  3. 修改现有记录
  4. 删除指定记录
  5. 浏览全部数据
  6. 智能数据更新:
  7. 每次增删改操作后自动刷新数据表格
  8. 支持手动刷新按钮获取最新数据
  9. 人性化交互设计:
  10. 使用 Tab 分隔不同功能模块
  11. 支持部分字段更新(留空字段保持原值)
  12. 自动生成递增ID(无需手动输入)
  13. 健壮的错误处理:
  14. 捕捉并显示数据库操作异常
  15. 自动处理空值和非空约束
  16. 直观数据展示:
  17. 表格形式展示数据
  18. 自动识别数据类型(数字/字符串)

使用说明:

  1. 首次运行会自动创建数据库文件(users.db)
  2. 在对应标签页填写信息执行操作:
  3. 添加:填写所有字段后点击"提交添加"
  4. 修改:输入用户ID和需要修改的字段
  5. 删除:输入要删除的用户ID
  6. 通过"浏览数据"标签页查看当前数据
  7. 所有操作结果会在对应模块下方显示

该方案通过 Gradio 实现了对 SQLite 数据库的完整 CRUD 操作,界面直观友好,适合需要快速构建简单数据库管理系统的场景。

相关文章

必藏!从漏洞靶场到数据库工具,20 款软件全搜罗

复制链接到夸克APP打开即可!及时下载,避免失效!一、软件库1.Upload-labs漏洞靶场https://pan.quark.cn/s/999624b8c0b82.ScanQLi数据库注入软件ht...

TLA+驱动开发:提升数据库系统软件质量的新方法

在当今数字化时代,数据库系统的质量和可靠性对于各种应用至关重要。然而,由于数据库系统的复杂性,传统的软件工程方法往往难以保证其软件质量。为了解决这一问题,郭华先生提出了使用TLA+(Temporal...

好用的ai工具推荐

在这个数字化快速发展的时代,人工智能(AI)正以惊人的速度改变着我们的工作和生活方式。无论是学生、职场人士,还是创业者,掌握一些实用的AI工具,都能大大提升工作效率,释放更多创造力。今天,我们将为您推...

开发常用工具软件分类指南

一、代码编写与调试- VS Code(跨平台,插件丰富,支持多语言调试)- Sublime Text(轻量高效,适合快速编辑)- PyCharm/IntelliJ IDEA(Java/Python等语...

5种开源ETL工具对比

工具名称Apache NiFiApache SeaTunnelPentaho Data Integration(PDI)Apache AirflowApache Beam简介易于使用、功能强大的数据处...