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

Flask应用插入MySQL数据报1064 SQL语法错误该如何解决?

问题根因

1064语法错误的核心原因是condition属于MySQL保留字,你直接将其作为列名放在INSERT的()符号内的字段列表中,SQL执行时会将其识别为关键字而非列名,因此在condition附近抛出语法错误。
第一种写法本身也存在逻辑问题:直接把Python变量名写在SQL字符串中,执行时会将new_info['make']这类内容直接作为SQL的一部分,而不会解析为对应变量的内容,即使没有保留字的问题也会执行失败,这种写法还存在SQL注入风险,完全不推荐使用。

解决方法

将SQL中属于保留字的列用反引号()包裹即可,year同样是MySQL的year`保留字,建议一同包裹,修正后的参数化写法如下:

sql_cursor = mysql.connection.cursor()

# 为保留字列名添加反引号
sql_cursor("INSERT INTO user_data (make,model,trim,fuel_type,`condition`,transmission,body_type,region,descriptn,eng_capacity,`year`, mileage, estm_value) VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)",
    (
        new_info['make'],
        (new_info['model'],
        new_info['trim'],
        new_info['fuel_type'],
        new_info['transmission'],
        new_info['condition'],
        add_bodytype['body_type'],
        add_region['region'],
        new_data['description'],
        new_data['eng_capacity'],
        year,
        new_data[''],
        new_data['mileage'],
        estm_value
    )
)
        
mysql.connection.commit()
额外建议
  • 后续建表时尽量避免使用MySQL保留字作为列名,如果已经建好表无法修改字段名,每次在SQL中使用该列时都需要用反引号包裹。
  • 坚持使用参数化查询的写法,不要直接拼接变量到SQL中,可有效避免SQL注入,也不用处理特殊字符转义的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 23:18:02