You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python Tkinter创建搜索表单查询SQLite3数据库

Tkinter + SQLite3 实现姓名搜索表单

我来帮你补全并优化代码,实现通过姓名查询SQLite数据库的功能。先梳理下需要完善的点:调整模块导入顺序、正确绑定窗口组件、实现搜索逻辑,还有添加结果展示区域。

以下是完整的可运行代码:

import sqlite3
from tkinter import Tk, Entry, Button, Text, Label, END

def search_person():
    # 获取输入的姓名并做非空校验
    name = entry_name.get().strip()
    if not name:
        result_text.delete(1.0, END)
        result_text.insert(END, "请输入要查询的姓名!")
        return
    
    # 连接数据库并执行查询
    conn = None
    try:
        conn = sqlite3.connect('new_assignment.db')
        cursor = conn.cursor()
        # 这里假设你的人员表名为persons,姓名字段为name,记得根据实际表结构修改
        cursor.execute("SELECT * FROM persons WHERE name LIKE ?", (f"%{name}%",))
        records = cursor.fetchall()
        
        # 清空结果框并展示查询结果
        result_text.delete(1.0, END)
        if not records:
            result_text.insert(END, f"未找到姓名包含'{name}'的人员信息")
        else:
            result_text.insert(END, "查询结果:\n")
            for idx, record in enumerate(records, 1):
                result_text.insert(END, f"第{idx}条:{record}\n")
    except sqlite3.Error as e:
        result_text.delete(1.0, END)
        result_text.insert(END, f"数据库查询出错:{str(e)}")
    finally:
        # 确保数据库连接最终关闭,避免资源泄漏
        if conn:
            conn.close()

# 创建主窗口
top = Tk()
top.title('人员信息搜索表单')
top.geometry("500x400")  # 设置窗口初始大小

# 姓名输入区域
label_name = Label(top, text="请输入姓名:")
label_name.pack(pady=5)
entry_name = Entry(top, width=30)
entry_name.pack(pady=5)

# 搜索按钮
search_btn = Button(top, text="搜索", command=search_person, width=10)
search_btn.pack(pady=10)

# 结果展示区域
result_label = Label(top, text="查询结果:")
result_label.pack(pady=5)
result_text = Text(top, width=60, height=15)
result_text.pack(pady=5)

# 启动窗口主循环
top.mainloop()

关键部分说明

  • 模块导入:先导入sqlite3和tkinter组件,避免代码顺序混乱。
  • 搜索函数:
    • 先做输入非空校验,避免无效查询;
    • 用try-except-finally处理数据库操作,确保连接无论成功失败都会关闭;
    • 使用LIKE和占位符?实现模糊搜索,同时避免SQL注入风险;
    • 把查询结果展示在Text组件中,友好提示无结果或错误信息。
  • 窗口布局:给每个组件指定父窗口,设置合理的间距让界面更美观,添加结果展示区域方便查看多条记录。

注意事项

你需要确保数据库new_assignment.db中存在对应的人员表(比如示例中的persons),并且姓名字段名和你的实际表结构一致,记得修改SELECT语句中的表名和字段名。如果需要精确匹配,把LIKE ?改成= ?,并去掉f"%{name}%"中的百分号,改成(name,)即可。

内容的提问来源于stack exchange,提问作者Manjil Lamichhane

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:18:22