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

Python导入CSV至MySQL报错DataError:ID列数据截断的解决方法

解决MySQL导入CSV时的DataError (1265)问题

你遇到的_mysql_exceptions.DataError: (1265, "Data truncated for column 'ID' at row 1")错误,核心原因很明确:你的代码把CSV的表头行当成数据插入数据库了。

看你的CSV内容,第一行是列名(ID,SCHOOL_CODE,...),而数据库里ID字段是double类型,你把字符串"ID"往数值类型字段里插,自然会触发数据截断的错误。

下面是具体的解决步骤:

1. 跳过CSV的表头行

在循环读取数据之前,先调用next(csv_data)跳过第一行的表头,这样后续循环处理的都是真正的业务数据。

2. 加上数据库提交操作

原代码没有执行db.commit(),就算插入成功也不会把数据保存到数据库里,这是很容易忽略的细节。

3. (可选)添加异常处理(提升代码健壮性)

可以加上try-except块,捕获可能的错误,避免程序意外中断,同时方便排查问题。

修改后的完整代码

#!/usr/bin/python
import MySQLdb
import csv

# 建立数据库连接
db = MySQLdb.connect(
    host="localhost",
    user="admin",
    passwd="admin",
    db="School_Test"
)
cur = db.cursor()

try:
    # 读取CSV文件(用with语句自动关闭文件更安全)
    with open('db_columns.csv', 'r') as csv_file:
        csv_data = csv.reader(csv_file)
        # 跳过表头行
        next(csv_data)
        # 循环插入数据
        for row in csv_data:
            cur.execute("""
                INSERT INTO part_table_test 
                (ID,SCHOOL_CODE,DISTNAME,AC_YEAR,SCHOOL_NAME,STATE_NAME,BLOCK_NAME,CLUSTER_NAME,VILLAGE_NAME,PINCODE,RURURB,ELECTRIC_YN,SCHMGT,LOWCLASS,HIGHCLASS,COMPUTER,CAL_YN,MEDINSTR1,MEDINSTR2,MEDINSTR3,MEDINSTR4) 
                VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
            """, row)
    # 提交事务,确保数据写入数据库
    db.commit()
    print("数据导入成功!")
except Exception as e:
    # 出错时回滚事务,避免脏数据
    db.rollback()
    print(f"导入失败,错误信息:{str(e)}")
finally:
    # 无论成功失败都关闭数据库连接
    db.close()

另外补充一点:虽然CSV里的数值都是字符串格式,但MySQLdb会自动帮我们转换成对应的数据库类型(比如把字符串"0"转成double类型的0),所以不需要手动做类型转换,只要跳过表头就可以解决核心问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:49:05