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

SQLite UPDATE语句WHERE子句附近语法错误排查求助

SQLite UPDATE语句语法错误排查

我写了一个更新SQLite数据库记录的函数,已经用print验证过传递的参数都是正确的,试过用?占位符和字典形式参数都报错,麻烦帮我看看语法哪里有问题?

函数代码:

def update_ticket_record(cal_txt, tr_txt, cust_cbo, addr_cbo, issue_txt, notes_txt, oid):
    conn = sqlite3.connect("my_service.db")
    cur = conn.cursor()
    cur.execute("""UPDATE ticket SET
        tick_date = :cal_txt,
        tick_tr = :tr_txt,
        tick_cust = :cust_cbo,
        tick_addr = :addr_cbo,
        tick_issue = :issue_txt,
        tick_notes = :notes_txt,
        WHERE tick_id = :oid""", {
            'cal_txt': cal_txt.get(),
            'tr_txt': tr_txt.get(),
            'cust_cbo': cust_cbo.get(),
            'addr_cbo': addr_cbo.get(),
            'issue_txt': issue_txt.get(),
            'notes_txt': notes_txt.get(1.0, 'end-1c'),
            'oid': oid,
        })

    conn.commit()
    conn.close()

报错信息:

File "D:\myJournal\database.py", line 96, in update_ticket_record
cur.execute("""UPDATE ticket SET
sqlite3.OperationalError: near "WHERE": syntax error

问题原因与解决方法

错误出在SQL语句的最后一个字段赋值后面多了个逗号:tick_notes = :notes_txt,,这个多余的逗号会让SQL解析器认为后面还有要更新的字段,紧接着遇到WHERE就会触发语法错误。

只需要把这个逗号删掉即可,修正后的SQL语句部分:

cur.execute("""UPDATE ticket SET
    tick_date = :cal_txt,
    tick_tr = :tr_txt,
    tick_cust = :cust_cbo,
    tick_addr = :addr_cbo,
    tick_issue = :issue_txt,
    tick_notes = :notes_txt
    WHERE tick_id = :oid""", {
        'cal_txt': cal_txt.get(),
        'tr_txt': tr_txt.get(),
        'cust_cbo': cust_cbo.get(),
        'addr_cbo': addr_cbo.get(),
        'issue_txt': issue_txt.get(),
        'notes_txt': notes_txt.get(1.0, 'end-1c'),
        'oid': oid,
    })

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 00:03:37