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

执行Python代码向MySQL插入数据报错Unknown column 'nan'如何解决

报错原因与解决方案

错误根因

mysql.connector.errors.ProgrammingError: 1054 (42S22): Unknown column 'nan' in 'field list' 报错的核心逻辑是:
Pandas里的缺失值 NaN 传入MySQL连接器时,没有被转换为SQL标准空值 NULL,而是被解析为未加单引号的字符串nan,MySQL语法解析时会把未加引号的标识符识别为字段名,找不到nan字段就触发了该报错。

修复方案

方案1:逐行插入前先替换NaN为None

Python的None会被mysql-connector自动识别为MySQL的NULL,先统一处理DataFrame的缺失值即可:

# 新增这一行:将所有NaN替换为None
dfp = dfp.where(pd.notnull(dfp), None)

# 原有插入逻辑不变
for row in dfp.itertuples():
 cursor.execute('''
             INSERT INTO players (PID, NAME)
             VALUES (%s,%s)
             ''',
                (row.PID,
                 row.NAME)
              )

方案2:使用批量插入提升效率

数据量较大时避免逐行遍历,用executemany批量操作:

# 提取需要插入的列,替换NaN为None,转成列表格式
insert_data = dfp[['PID', 'NAME']].where(pd.notnull(dfp[['PID', 'NAME']]), None).values.tolist()

# 批量插入
cursor.executemany('''
INSERT INTO players (PID, NAME)
VALUES (%s, %s)
''', insert_data)

可选处理:非空字段的缺失值填充

如果你的PID或NAME字段在MySQL表中设置了NOT NULL约束,插入NULL会触发新的报错,可提前填充缺失值:

# 字符串类型NAME填充默认值
dfp['NAME'] = dfp['NAME'].fillna('未录入')
# 数字类型PID填充默认值
dfp['PID'] = dfp['PID'].fillna(0)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 22:45:02