要创建一个类似于 phpMyAdmin 的 SQLite 数据库简单的可视化管理工具,支持多个功能,如查看数据库、表的结构、执行 SQL 查询、查看和编辑数据等。

主要功能

  1. 连接到 SQLite 数据库
  2. 查看所有表
  3. 查看表的结构
  4. 执行自定义 SQL 查询
  5. 查看和编辑数据
  6. 插入和删除记录

示例

import tkinter as tk  # 导入 tkinter 模块以创建 GUI
from tkinter import messagebox, ttk  # 从 tkinter 导入消息框和树视图组件
import sqlite3  # 导入 sqlite3 模块以进行 SQLite 数据库操作

class SQLiteManager:
    def __init__(self, master):
        self.master = master  # 将主窗口引用存储在实例变量中
        self.master.title("SQLite Database Manager")  # 设置窗口标题
        self.conn = None  # 初始化数据库连接为 None
        self.cursor = None  # 初始化数据库游标为 None

        self.create_widgets()  # 创建 GUI 组件

    def create_widgets(self):
        # 数据库连接部分
        self.label_db = tk.Label(self.master, text="Database Name:")  # 创建标签,提示用户输入数据库名
        self.label_db.pack(pady=5)  # 将标签添加到窗口并设置垂直间距

        self.entry_db = tk.Entry(self.master)  # 创建输入框,让用户输入数据库名称
        self.entry_db.pack(pady=5)  # 将输入框添加到窗口并设置垂直间距

        self.button_connect = tk.Button(self.master, text="Connect", command=self.connect_db)  # 创建连接按钮
        self.button_connect.pack(pady=5)  # 将按钮添加到窗口并设置垂直间距

        # 表格选择部分
        self.label_table = tk.Label(self.master, text="Select Table:")  # 创建标签,提示用户选择表
        self.label_table.pack(pady=5)  # 将标签添加到窗口并设置垂直间距

        self.table_listbox = tk.Listbox(self.master)  # 创建列表框,显示数据库中的表
        self.table_listbox.pack(pady=5)  # 将列表框添加到窗口并设置垂直间距

        self.button_show_structure = tk.Button(self.master, text="Show Structure", command=self.show_structure)  # 创建显示表结构的按钮
        self.button_show_structure.pack(pady=5)  # 将按钮添加到窗口并设置垂直间距

        self.button_view_data = tk.Button(self.master, text="View Data", command=self.view_data)  # 创建查看数据的按钮
        self.button_view_data.pack(pady=5)  # 将按钮添加到窗口并设置垂直间距

        # SQL 执行部分
        self.label_sql = tk.Label(self.master, text="SQL Query:")  # 创建标签,提示用户输入 SQL 查询
        self.label_sql.pack(pady=5)  # 将标签添加到窗口并设置垂直间距

        self.entry_sql = tk.Entry(self.master, width=50)  # 创建输入框,让用户输入 SQL 查询
        self.entry_sql.pack(pady=5)  # 将输入框添加到窗口并设置垂直间距

        self.button_execute = tk.Button(self.master, text="Execute", command=self.execute_sql)  # 创建执行查询的按钮
        self.button_execute.pack(pady=5)  # 将按钮添加到窗口并设置垂直间距

        # 数据显示区域
        self.tree = ttk.Treeview(self.master)  # 创建树视图组件,用于显示查询结果
        self.tree.pack(pady=5)  # 将树视图添加到窗口并设置垂直间距

        # 状态栏
        self.status = tk.Label(self.master, text="", relief=tk.SUNKEN, anchor='w')  # 创建状态标签,显示操作状态
        self.status.pack(side=tk.BOTTOM, fill=tk.X)  # 将状态标签添加到窗口底部并填充宽度

    def connect_db(self):
        db_name = self.entry_db.get()  # 从输入框获取数据库名称
        if db_name:  # 检查数据库名称是否为空
            try:
                self.conn = sqlite3.connect(db_name)  # 尝试连接到指定的 SQLite 数据库
                self.cursor = self.conn.cursor()  # 创建游标以执行 SQL 查询
                self.update_table_list()  # 更新表格列表
                self.status.config(text=f"Connected to {db_name}")  # 更新状态栏,显示连接成功的信息
            except Exception as e:  # 捕获连接错误
                messagebox.showerror("Error", str(e))  # 显示错误消息框
        else:
            messagebox.showwarning("Warning", "Please enter a database name.")  # 提示用户输入数据库名称

    def update_table_list(self):
        self.table_listbox.delete(0, tk.END)  # 清空列表框
        self.cursor.execute("SELECT name FROM sqlite_master WHERE type='table';")  # 查询所有表名
        tables = self.cursor.fetchall()  # 获取所有表名
        for table in tables:  # 遍历表名
            self.table_listbox.insert(tk.END, table[0])  # 将表名插入列表框

    def show_structure(self):
        selected_table = self.table_listbox.get(tk.ACTIVE)  # 获取当前选中的表名
        if selected_table:  # 检查是否选择了表
            self.cursor.execute(f"PRAGMA table_info({selected_table});")  # 查询表的结构信息
            columns = self.cursor.fetchall()  # 获取列信息
            structure_info = "\n".join([f"{col[1]}: {col[2]}" for col in columns])  # 格式化列信息
            messagebox.showinfo("Table Structure", structure_info)  # 显示表结构信息
        else:
            messagebox.showwarning("Warning", "Please select a table.")  # 提示用户选择表

    def view_data(self):
        selected_table = self.table_listbox.get(tk.ACTIVE)  # 获取当前选中的表名
        if selected_table:  # 检查是否选择了表
            self.cursor.execute(f"SELECT * FROM {selected_table};")  # 查询表中的所有数据
            rows = self.cursor.fetchall()  # 获取所有数据行
            self.update_tree_view(rows)  # 更新树视图以显示数据
        else:
            messagebox.showwarning("Warning", "Please select a table.")  # 提示用户选择表

    def update_tree_view(self, rows):
        self.tree.delete(*self.tree.get_children())  # 清空树视图
        if rows:  # 检查是否有数据行
            columns = [f"Column {i}" for i in range(len(rows[0]))]  # 生成列名
            self.tree["columns"] = columns  # 设置树视图的列
            for col in columns:  # 遍历列名
                self.tree.heading(col, text=col)  # 设置每列的标题
            for row in rows:  # 遍历数据行
                self.tree.insert("", "end", values=row)  # 将每行数据插入树视图

    def execute_sql(self):
        sql_query = self.entry_sql.get()  # 从输入框获取 SQL 查询
        if sql_query:  # 检查查询是否为空
            try:
                self.cursor.execute(sql_query)  # 执行 SQL 查询
                if sql_query.strip().lower().startswith("select"):  # 检查是否为 SELECT 查询
                    rows = self.cursor.fetchall()  # 获取查询结果
                    self.update_tree_view(rows)  # 更新树视图以显示结果
                else:  # 对于其他类型的查询
                    self.conn.commit()  # 提交更改
                    messagebox.showinfo("Success", "Query executed successfully.")  # 显示成功消息
            except Exception as e:  # 捕获执行错误
                messagebox.showerror("Error", str(e))  # 显示错误消息框
        else:
            messagebox.showwarning("Warning", "Please enter a SQL query.")  # 提示用户输入 SQL 查询

    def close_db(self):
        if self.conn:  # 检查数据库连接是否存在
            self.conn.close()  # 关闭数据库连接
        self.master.destroy()
        self.master.quit()

if __name__ == "__main__":
    root = tk.Tk()  # 创建主窗口
    app = SQLiteManager(root)  # 实例化 SQLiteManager 类
    root.protocol("WM_DELETE_WINDOW", app.close_db)  # 设置关闭窗口时调用 close_db 方法
    root.mainloop()  # 运行主事件循环

功能解释:

  1. 连接到 SQLite 数据库

    • 用户输入数据库名称,点击“Connect”按钮连接到数据库,并更新可用的表格列表。
  2. 查看表结构

    • 用户可以从列表中选择一个表,点击“Show Structure”按钮,查看该表的列信息。
  3. 查看表数据

    • 用户选择表后,点击“View Data”按钮,可以查看表中的所有数据。
  4. 执行 SQL 查询

    • 用户可以在输入框中输入任意 SQL 查询,点击“Execute”按钮执行该查询。查询结果将显示在数据表中。
  5. 数据表显示

    • 使用 ttk.Treeview 显示查询结果,支持动态更新列和行。
  6. 状态栏

    • 状态栏用于显示连接状态和操作结果的反馈。
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐