ProgrammingError: nan can not be used with MySQL,怎么处理?

NSERT INTO 解决一切格式数据库入库问题, 但是np.NAN 不行,所以考虑可以将 np.NAN,替换成别的值,比如999,'', 'nan', 'none' 都可以,如果想输入到mysql仍然为 (NULL)显示,则需要先将df 转成列表,将值替换成 none。

以下为一个模拟流程:

python 复制代码
#  创建名为 `students_table` 的表
CREATE TABLE IF NOT EXISTS students1 (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50) NOT NULL,  # 姓名 字符串
    age VARCHAR(50) ,  # 年龄 字符串 , 
    score INT  # 成绩 整型, 如果非得输入,例如 '我', 'None' ,等字符串就不能使用 to_sql 写入库,要用insert_into
);

import pandas as pd
import numpy as np
import pymysql


# 创建包含 NaN 值的 DataFrame
data = {
    'name': ['张三', '李四', '王五'],
    'age': ['', float('nan'), 'nan'],
    'score': ['', np.NAN,'nan']
}

df = pd.DataFrame(data)
df

# 这里直接将NAN替换成999处理
df = df.replace(np.nan,'999')

conn = pymysql.connect(host="xxx.xxx.xxx.xxx", user="root", password="---------", database="testdb", charset="utf8") 
cursor = conn.cursor()

keys = ','.join(df.columns.to_list())
user_data = df.apply(lambda x: tuple(x), axis=1).values.tolist()

for user in user_data:
    print(user)
    query = f"INSERT INTO students1({keys}) VALUES ({('%s,' * len(keys.split(',')) )[:-1]})"
    cursor.execute(query, user)

# 提交更改
conn.commit()
相关推荐
NineData6 小时前
NineData 迁移评估功能正式上线
数据库·dba
NineData11 小时前
数据库迁移总踩坑?用 NineData 迁移评估,提前识别所有兼容性风险
数据库·程序员·云计算
赵渝强老师13 小时前
【赵渝强老师】PostgreSQL中表的碎片
数据库·postgresql
全栈老石17 小时前
拆解低代码引擎核心:元数据驱动的"万能表"架构
数据库·低代码
倔强的石头_1 天前
kingbase备份与恢复实战(二)—— sys_dump库级逻辑备份与恢复(Windows详细步骤)
数据库
jiayou643 天前
KingbaseES 实战:深度解析数据库对象访问权限管理
数据库
于眠牧北3 天前
MySQL的锁类型,表锁,行锁,MVCC中所使用的临键锁
mysql
李广坤4 天前
MySQL 大表字段变更实践(改名 + 改类型 + 改长度)
数据库
Turnip12025 天前
深度解析:为什么简单的数据库"写操作"会在 MySQL 中卡住?
后端·mysql
爱可生开源社区5 天前
2026 年,优秀的 DBA 需要具备哪些素质?
数据库·人工智能·dba