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

Python sqlite3使用带WHERE子句的UPDATE语句更新多行出现语法错误

问题原因

报错是因为你混用了Python f字符串语法和sqlite3参数化查询规则:你在SQL语句内部的WHERE子句写了WHERE f_name = f'{record_id}',Python解析f字符串时会把这部分替换为WHERE f_name = f'sam',但sqlite3不识别SQL语句里多出来的f前缀,因此触发语法错误。你手动写入'sam'时没有多余的f前缀,所以可以正常运行。

修复方案

不要用f字符串拼接任何SQL内容,所有动态值全部通过参数化字典传递,既避免语法错误,也能防范SQL注入风险,修改后的代码如下:

conn = sqlite3.connect("usersEsteso.db")
c = conn.cursor()

record_id = name
# 完全使用参数化查询,WHERE条件也通过参数传递
c.execute("""UPDATE usersEsteso SET
        f_name = :first,
        P_iva = :P_iva,
        cell_number = :cell_number,
        tax = :tax,
        inps = :inps

        WHERE f_name = :record_id""",
          {
              "first": f_name_entry.get(),
              "P_iva": P_iva_entry.get(),
              "cell_number": cell_number_entry.get(),
              "tax": tax_entry.get(),
              "inps": inps_entry.get(),
              "record_id": record_id
          }
          )

conn.commit()
conn.close()
注意事项

如果你一定要用f字符串拼接WHERE条件(极不推荐),可以去掉SQL内部的f前缀,写成WHERE f_name = '{record_id}',但这种写法如果record_id变量包含单引号会直接触发报错,还存在SQL注入风险,不建议使用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 18:27:00