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

Python中SQLite3数据库无法更新问题求助(附Tkinter代码)

问题描述

我用Tkinter开发Python项目,搭配SQLite3数据库(表名criminal_records),但数据库更新功能一直弹出异常错误,就算移除异常处理代码,数据库也没法更新。更新功能代码如下:

#update code
def update_data(self):
    if self.var_case_id.get()=="":
        messagebox.showerror('Error','All fields are required')
    else:
        try:
            update=messagebox.askyesno('Update', "Are you sure you want to update this record?")
            if update>0:
                conn=sqlite3.connect('criminal_records.db')
                my_cursor=conn.cursor() 
                my_cursor.execute('UPDATE criminal_records SET Case ID=?, Criminal Name=?,Case Number=?,Date of crime=?, Crime Type=?, Description=?,Block=?,Location=?,Arrest Date=?, Age=?, Gender=?, WHERE Case Id=?', (
                    self.var_case_id.get(),
                    self.var_name.get(),
                    self.var_case_number.get(),
                    self.var_date_of_crime.get(),
                    self.var_crime_type.get(),
                    self.var_description.get(),
                    self.var_block.get(),
                    self.var_location.get(),
                    self.var_arrest_date.get(),
                    self.var_age.get(),
                    self.var_gender.get(),
                    
                ))

            else:
                if not update:
                    return
            conn.commit()
            self.fetch_data()
            self.clear_data()
            conn.close()
            messagebox.showinfo('Successful', 'Criminal record has been updated')
        except Exception as es:
            messagebox.showerror('Error',f'Due to{str(es)}')  

报错截图:
报错信息

问题分析与修复

你的代码存在几个关键错误,导致SQL执行失败:

  • SQL语法错误:字段名含空格未转义
    SQLite中,包含空格的字段名需要用双引号"包裹,否则会被解析为多个关键字,引发语法错误。比如Case ID要写成"Case ID"。

  • UPDATE语句多了逗号
    Gender=?, WHERE这里的逗号多余,直接去掉逗号,改成Gender=? WHERE。

  • 参数数量不匹配
    SQL语句里有12个占位符(SET子句11个,WHERE子句1个),但你只传入了11个参数,缺少WHERE条件对应的Case Id值,需要在参数末尾加上self.var_case_id.get()。

  • 逻辑错误:连接操作范围错误
    当用户点击取消(update为False)时,代码会直接执行conn.commit()和conn.close(),但此时conn还没创建,会引发新的错误。需要把提交、关闭连接、刷新数据这些操作放到if update:的代码块内。

  • 布尔值判断错误
    messagebox.askyesno()返回的是布尔值True/False,直接用if update:判断即可,不用update>0。

修正后的代码
def update_data(self):
    if self.var_case_id.get() == "":
        messagebox.showerror('Error', 'All fields are required')
    else:
        try:
            update = messagebox.askyesno('Update', "Are you sure you want to update this record?")
            if update:
                conn = sqlite3.connect('criminal_records.db')
                my_cursor = conn.cursor() 
                # 修正字段名转义、多余逗号,补充缺失的参数
                my_cursor.execute('''UPDATE criminal_records 
                                    SET "Case ID"=?, "Criminal Name"=?, "Case Number"=?, 
                                        "Date of crime"=?, "Crime Type"=?, Description=?, 
                                        Block=?, Location=?, "Arrest Date"=?, Age=?, Gender=? 
                                    WHERE "Case Id"=?''', (
                    self.var_case_id.get(),
                    self.var_name.get(),
                    self.var_case_number.get(),
                    self.var_date_of_crime.get(),
                    self.var_crime_type.get(),
                    self.var_description.get(),
                    self.var_block.get(),
                    self.var_location.get(),
                    self.var_arrest_date.get(),
                    self.var_age.get(),
                    self.var_gender.get(),
                    self.var_case_id.get()  # 补充WHERE条件的参数
                ))
                conn.commit()
                self.fetch_data()
                self.clear_data()
                conn.close()
                messagebox.showinfo('Successful', 'Criminal record has been updated')
            else:
                return
        except Exception as es:
            messagebox.showerror('Error', f'Due to {str(es)}')  # 加空格优化提示可读性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 07:57:49