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

sqlite3.OperationalError语法错误求助:表单提交触发near "."错误

解决sqlite3.OperationalError: near ".": syntax error的问题

老哥,我一眼就瞅出你遇到的问题根源了——你SQL插入语句里的Vendor_No.字段名包含了一个点(.),而在SQL语法里,这个点是用来分隔表名和字段名的(比如table_name.column_name这种写法)。SQLite的解析器看到这个点的时候,会误以为你要引用某个表的Vendor_No字段,结果后面还跟了个多余的点,直接就触发语法错误了!

具体修复方案

这里给你两个可行的解决办法:

1. 给特殊字段名加上包裹符

SQLite允许用反引号(`)、**双引号(")或者方括号([])**来包裹包含特殊字符的字段名,明确告诉解析器这是一个完整的字段名。

举个例子,假设你原来的代码是这样的:

# 错误写法:字段名里的点导致语法错误
c.execute("INSERT INTO dy_table (Vendor_No., Product_Name, Price) VALUES (?, ?, ?)", (vendor_no, product, price))

修改成下面任意一种写法都可以:

  • 用反引号包裹:
c.execute("INSERT INTO dy_table (`Vendor_No.`, Product_Name, Price) VALUES (?, ?, ?)", (vendor_no, product, price))
  • 用双引号包裹(注意SQL语句要用单引号括起来,避免和双引号冲突):
c.execute('INSERT INTO dy_table ("Vendor_No.", Product_Name, Price) VALUES (?, ?, ?)', (vendor_no, product, price))
  • 用方括号包裹:
c.execute("INSERT INTO dy_table ([Vendor_No.], Product_Name, Price) VALUES (?, ?, ?)", (vendor_no, product, price))

2. 重命名字段(推荐长期方案)

如果你的数据库结构还能修改,建议直接把Vendor_No.改成不带特殊字符的名字,比如Vendor_No(去掉末尾的点)。这样不仅能彻底解决当前的语法问题,还能避免后续在查询、更新操作中再遇到类似的特殊字符兼容问题,维护起来更省心。

额外提醒

一定要坚持用参数化查询(也就是代码里用?作为占位符的方式),这种写法不仅能避免SQL注入的安全风险,还能让你不用手动处理字符串转义的问题,一举两得。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:09:08