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

如何使用字符串实例执行SQL插入操作?遇到pymysql 1054未知列错误如何解决?

pymysql执行SQL插入报1054错误解决方案

你遇到的pymysql.err.OperationalError: (1054, "Unknown column 'ZBZ' in 'field list'")错误,核心原因是手动拼接SQL时没有给字符串类型的插入值加单引号,MySQL将传入的字符串内容识别为字段名,找不到对应字段就抛出该错误。

比如你拼接得到的非法SQL结构如下:
INSERT INTO 你的表名 (Id, score) VALUES (ZBZ, 90)
MySQL会将没有引号包裹的ZBZ判定为字段名,而非你要插入的Id字段值。


解决方案

  • 临时修复方案(不推荐,存在SQL注入风险)
    手动给字符串类型的插入值包裹英文单引号,修正后SQL结构如下:
    INSERT INTO 你的表名 (Id, score) VALUES ('ZBZ', 90)
    该方案仅能临时解决报错,若插入值包含单引号等特殊字符还会触发新的语法错误,同时无法防范SQL注入攻击。

  • 最优解决方案(推荐)
    不要手动拼接SQL字符串,直接使用pymysql自带的参数化查询能力,示例代码如下:

import pymysql

# 数据库连接配置替换为你自己的信息
conn = pymysql.connect(
    host="127.0.0.1",
    user="你的数据库用户名",
    password="你的数据库密码",
    database="你的数据库名"
)
cursor = conn.cursor()

# 1. 先将你的name数组转成字符串,比如[65,65,65]转成'AAA'
id_value = ''.join([chr(i) for i in name])
score_value = 你的分数变量

# 2. 用%s做占位符,参数放在execute的第二个参数元组中
sql = "INSERT INTO 你的表名 (Id, score) VALUES (%s, %s)"
cursor.execute(sql, (id_value, score_value))
conn.commit()

# 关闭连接
cursor.close()
conn.close()

参数化查询会自动处理不同数据类型的格式适配,字符串类型的值会自动加引号,既不会出现当前的语法错误,还能完全规避SQL注入风险,同时不需要你手动处理特殊字符转义。

额外注意:你的Id字段类型为varchar(3),需保证转换得到的字符串长度不超过3,否则会触发数据长度超限的报错,你当前使用的[65,65,65]转换后长度为3,符合字段要求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 16:36:03