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

yumo6664周前 (04-07)技术文章14

以下是一个使用 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 操作,界面直观友好,适合需要快速构建简单数据库管理系统的场景。

相关文章

告别手动编写数据库文档!PDMReader 一键生成设计文档效率提升90%

导语:作为项目经理,你是否曾为数据库设计文档的编写而头疼?面对数百张表、上千个字段,手动整理不仅耗时费力,还容易遗漏或出错。今天分享一套高效工具组合——PowerDesigner + PDMReade...

【推荐】一款免费、全能型的数据库管理神器,效率提升利器

如果您对源码&技术感兴趣,请点赞+收藏+转发+关注,大家的支持是我分享最大的动力!!!项目介绍HeidiSQL 是一款免费的数据库管理工具,适用于与数据库打交道的开发人员和数据库管理员。它支持多种数据...

一款牛逼的数据库连接工具——Dbeaver的使用技巧

安装就不赘述了,聊一下使用过程中的一些内容(1)上图中在查询某个表后,可以直接在标红的输入框中输入查询条件,就可以查询满足条件的数据,下图是工具自动拼接好的sql语句。点击下面的“导出数据”,可以将查...

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

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

flway,数据库迁移工具,10万数据,20ms

我们现在这样的一个问题,需要把a表数据导入在b表中,我们需要把a表所有数据导出,然后把所有数据导入b表中,还需要保证俩个表结构相同,有没有一个工具,只需要一个按钮我们就可以完成数据表的迁移,flway...

开源向量数据库Milvus与Weaviate选型对比

在构建企业内部知识库时,选择Milvus或Weaviate需根据具体需求权衡其核心特性。以下是关键维度的对比分析及选型建议:一、核心功能与数据模型Milvus:纯向量引擎:专注于高性能向量检索,支持多...