如何修复Tkinter中空字段表单仍写入SQLite数据库的问题
解决Tkinter表单空字段提交问题
你的问题核心是空字段检测后没有终止后续代码执行,所以即使弹出错误提示,程序依然会继续执行数据库查询和插入操作。以下是修复后的代码,同时还修正了数据库字段名不匹配的问题(原代码创建表时用Matches Played,插入时却写Matches,会导致SQL语法错误):
import sqlite3 from tkinter import messagebox def CreatePlayerProfile(): conn = sqlite3.connect("PlayersDatabase.db") c = conn.cursor() # 修正字段名,将带空格的Matches Played改为Matches_Played,避免SQL语法问题 c.execute("""CREATE TABLE IF NOT EXISTS Players ( First_name text, Last_name text, Age text, Matches_Played text, Goals text, Assists text, Position text )""") global firstname, surname, age, matches_played, goals, assists, positionn # 去除输入内容首尾空格,避免纯空格被判定为有效输入 firstname = firstname_entry.get().strip() surname = surname_entry.get().strip() age = age_entry.get().strip() matches_played = matches_played_entry.get().strip() goals = goals_entry.get().strip() assists = assists_entry.get().strip() positionn = position.get().strip() # 检测空字段,发现空值则提示并终止函数 if not (firstname and surname and age and matches_played and goals and assists): messagebox.showerror("Error", "Fields cannot be left blank!") conn.close() return # 直接退出函数,不再执行后续数据库操作 # 检查用户是否已存在 c.execute('SELECT * FROM Players WHERE First_name = ?', (firstname,)) if c.fetchall(): messagebox.showerror("Error", "User already exists. Did you mean to update?") else: # 使用修正后的字段名执行插入操作 c.execute("INSERT INTO Players (First_name, Last_name, Age, Matches_Played, Goals, Assists, Position) VALUES (?,?,?,?,?,?,?)", (firstname, surname, age, matches_played, goals, assists, positionn)) conn.commit() messagebox.showinfo("Success!", f"{firstname} {surname} has been added successfully!") conn.close() # 统一关闭数据库连接,避免资源泄漏
关键修改说明:
- 空字段检测后添加
return语句,直接终止函数,彻底阻止后续的数据库操作 - 用
strip()处理输入内容,过滤纯空格的无效输入 - 修正数据库表字段名,解决创建表与插入操作的字段不匹配问题
- 统一添加数据库连接关闭操作,避免资源占用
内容的提问来源于stack exchange,提问作者Joe
相关产品推荐
相关产品推荐

