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

Python操作MySQL插入数据报错:Unknown column 'None' in 'field list'

问题分析与解决

错误原因

你遇到的Unknown column 'None' in 'field list'错误,根源在于用f-string直接拼接SQL语句:
当self.id、self.name或self.lastname中任意一个值为Python的None时,f-string会把它转换成字符串"None",拼接后的SQL会变成类似VALUES (None, 'xxx', 'xxx')。MySQL会把这个字符串None当成列名,而你的表中并没有名为None的列,因此报错。

哪怕你觉得没有None值,也可能存在某个变量未被正确初始化(比如self.id没赋值,默认是None),只是你没注意到。

解决方案

绝对不要用字符串拼接的方式写SQL,改用参数化查询,这不仅能解决None的问题,还能避免SQL注入风险。修改代码如下:

cnx = mysql.connector.connect(user='root', password='',
                              host='127.0.0.1', database='shop')
cursor = cnx.cursor()
# 使用参数化查询,%s是占位符
cursor.execute(
    'INSERT INTO customers (id, name, last_name) VALUES (%s, %s, %s)',
    (self.id, self.name, self.lastname)
)
# 别忘了提交事务
cnx.commit()

说明

  • MySQL连接器会自动将Python的None转换为SQL的NULL,符合数据库的语法要求。
  • 参数化查询会自动处理字符串转义,避免单引号等特殊字符导致的语法错误。

额外检查

如果还是不确定变量是否为None,可以在执行SQL前打印变量值确认:

print(f"id: {self.id}, name: {self.name}, lastname: {self.lastname}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 23:53:22