使用tkinter实现一个可视化的SQLite数据库编辑查看
要创建一个类似于 phpMyAdmin 的 SQLite 数据库简单的可视化管理工具,支持多个功能,如查看数据库、表的结构、执行 SQL 查询、查看和编辑数据等。
·
要创建一个类似于 phpMyAdmin 的 SQLite 数据库简单的可视化管理工具,支持多个功能,如查看数据库、表的结构、执行 SQL 查询、查看和编辑数据等。
主要功能
- 连接到 SQLite 数据库
- 查看所有表
- 查看表的结构
- 执行自定义 SQL 查询
- 查看和编辑数据
- 插入和删除记录
示例
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() # 运行主事件循环
功能解释:
-
连接到 SQLite 数据库:
- 用户输入数据库名称,点击“Connect”按钮连接到数据库,并更新可用的表格列表。
-
查看表结构:
- 用户可以从列表中选择一个表,点击“Show Structure”按钮,查看该表的列信息。
-
查看表数据:
- 用户选择表后,点击“View Data”按钮,可以查看表中的所有数据。
-
执行 SQL 查询:
- 用户可以在输入框中输入任意 SQL 查询,点击“Execute”按钮执行该查询。查询结果将显示在数据表中。
-
数据表显示:
- 使用
ttk.Treeview
显示查询结果,支持动态更新列和行。
- 使用
-
状态栏:
- 状态栏用于显示连接状态和操作结果的反馈。

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