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

使用Django应用向SQL插入数据时遭遇COUNT字段错误或语法错误

问题原因及解决方法

直接错误原因

你写的SQL插入语句字符串拼接存在语法错误:saveDetails.Date前面缺少开头的单引号,导致生成的SQL语句格式混乱,字段数量与值的数量不匹配,触发了ODBC驱动的COUNT field incorrect or syntax error错误。

拼接后的错误SQL语句类似:

insert into [dbo].[testtable](Date,Questions,Result) values (01/01/2024','问题内容','结果');

可以看到第一个日期值没有开头的单引号,SQL解析时会判定字段和值的数量不对应。

临时修复(不推荐)

修正字符串拼接,给saveDetails.Date加上开头的单引号:

cursor.execute("insert into [dbo].[testtable](Date,Questions,Result) values ('"+saveDetails.Date+"','"+saveDetails.Questions+"','"+saveDetails.Result+"');")

正确且安全的做法:参数化查询

字符串拼接SQL存在SQL注入风险,且极易出现语法错误,应该使用参数化查询:

cursor.execute(
    "insert into [dbo].[testtable](Date, Questions, Result) values (?, ?, ?)",
    (saveDetails.Date, saveDetails.Questions, saveDetails.Result)
)

用?作为占位符,pyodbc会自动处理参数的转义和格式,彻底避免语法错误与注入风险。

更符合Django规范的做法:使用ORM

既然你已经定义了ModelClass,完全不需要手动写数据库连接和原生SQL,直接用Django ORM的save()方法即可:

save_details = ModelClass()
today_date = date.today()
save_details.Date = today_date.strftime('%m/%d/%Y')
save_details.Questions = question
save_details.Result = str(result)
save_details.save()  # 调用save方法,Django自动处理所有数据库操作

这种方式无需手动管理连接,也规避了原生SQL的各类问题,是Django开发的标准流程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 19:22:59