如何使用Python Tkinter连接SQLite数据库并展示数据?

云墨姑娘_5496

云墨姑娘_5496

2026-06-29

932人浏览

原创

tkinter 本身不提供数据库连接能力,它只是 gui 工具包;真正负责连接 sqlite 的是 python 标准库中的 sqlite3 模块。

如何使用python tkinter连接sqlite数据库并展示数据?

为什么不能直接用 Tkinter 连接数据库?

Tkinter 本身不提供数据库连接能力,它只是 GUI 工具包。真正负责连接 SQLite 的是 Python 标准库中的 sqlite3 模块。常见误区是以为 Tkinter 有内置 DB 接口,结果卡在 import 或报错 AttributeError: module 'tkinter' has no attribute 'connect'。

正确做法是:用 sqlite3.connect() 获取连接,再把查询结果塞进 Tkinter 控件(比如 Treeview 或 Listbox)里显示。

怎么把查询结果填进 Treeview?

Treeview 是展示表格数据最常用的选择,但新手常忽略列定义和数据插入顺序,导致表头空白或数据错位。

  • 必须先用 tree['columns'] = ('id', 'name', 'age') 显式声明列名,再调用 tree.heading() 设置表头
  • 插入数据时,tree.insert('', 'end', values=row) 中的 row 必须是元组或列表,且长度与列数严格一致
  • 别漏掉 tree.column('#0', width=0, stretch=False) 隐藏默认 ID 列,否则会多出一列空序号

示例片段:

python-code-analyz
python-code-analyz

专业Python代码分析与优化,支持语法检查、安全扫描、性能评估、复杂度分析及重构后优化代码生成。

下载
import tkinter as tk
from tkinter import ttk
import sqlite3
<p>root = tk.Tk()
tree = ttk.Treeview(root, columns=('id', 'name', 'age'), show='headings')
tree.heading('id', text='ID')
tree.heading('name', text='姓名')
tree.heading('age', text='年龄')
tree.pack()</p><p>conn = sqlite3.connect('example.db')
cur = conn.cursor()
cur.execute('SELECT id, name, age FROM users')
for row in cur.fetchall():
tree.insert('', 'end', values=row)  # 注意:values 参数必须是可迭代对象
conn.close()
root.mainloop()</p>

执行 INSERT/UPDATE 后界面不刷新怎么办?

很多人写完 cur.execute("INSERT ...") 就以为数据自动更新到界面上了,结果 Treeview 还是旧的——因为 GUI 和数据库是两个独立状态,没手动刷新就不会同步。

  • 每次增删改后,必须重新查询并清空 + 重填 Treeview,不能只靠 conn.commit()
  • 清空用 for item in tree.get_children(): tree.delete(item),别用 tree.delete(*tree.get_children())(语法错误)
  • 如果用了 fetchall() 缓存结果,记得在操作后重新 execute 查询,而不是复用旧结果

容易被忽略的是事务隔离:SQLite 默认是 autocommit 关闭状态,INSERT 后不 commit(),其他连接(包括你马上要查的那一次)可能看不到新数据。

中文乱码或字段名显示异常的根源在哪?

SQLite 数据库文件本身不存字符编码信息,Python sqlite3 模块默认用 UTF-8 解析文本,但如果你的数据库是用其他工具(如 DB Browser)以 GBK 创建的,或者 Python 脚本文件编码不是 UTF-8,就会出现方块字或问号。

  • 确认脚本文件保存为 UTF-8(无 BOM),编辑器里看右下角编码标识
  • 避免在 SQL 字符串里硬写中文字符串,改用参数化:cur.execute("INSERT INTO users(name) VALUES (?)", ("张三",))
  • Treeview 表头中文正常,但数据显示为乱码?大概率是数据库读取时解码失败,可强制指定连接编码(虽非常规,但应急可用):conn = sqlite3.connect('db.db'); conn.text_factory = str

真正稳定的做法是统一全程 UTF-8:建库时用 UTF-8 工具、Python 文件存 UTF-8、SQL 语句参数化传入、不依赖隐式编码猜测。

Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!

相关专题

更多
python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

2023.07.20

1651

4

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

2023.07.25

4084

7

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.31

1649

3

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

2023.08.03

23597

23

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

2887

5

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

2927

5

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

1143

5

python合并两个列表
python合并两个列表

Python是一种强大的编程语言,具有许多方便的功能和工具。在Python中,有多种方法可以合并两个列表。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.10

596

4

python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2263

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程