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
相关产品推荐
相关产品推荐

