新闻详情

新闻详情

首页 / 资讯中心 / 详情

【已解决】python pymysql 报错 DataError (1265, Data truncated for column ‘num‘ at row 1):用 TaoToken 统一 Key

发布时间:2026/10/2 23:10:57来源:尧图网络
【已解决】python pymysql 报错 DataError (1265, Data truncated for column ‘num‘ at row 1):用 TaoToken 统一 Key
1. 从一次真实的 DataError 1265 说起pymysql.err.DataError: (1265, Data truncated for column num at row 1)这个报错几乎每个用 Python 往 MySQL 写数据的人都会撞上一次。它的字面意思是「第 1 行的 num 列数据被截断了」但真正让人抓狂的地方在于你明明把字段改成了varchar(100)甚至把datetime也换成了varchar报错依旧纹丝不动。这个报错的核心场景是用 pandas 读取 Excel 或 CSV再通过 pymysql 批量插入 MySQL。数据源里num可能是801001.SI这种带字母和点的字符串而建表时字段类型写成了int或floatMySQL 在严格模式下拒绝隐式转换直接抛 1265。另一种常见情况是字段长度不够比如varchar(32)装不下 50 个字符的字符串。适合谁看正在做财经数据入库、爬虫落库、Excel 转数据库的 Python 开发者已经搜过「Data truncated for column」但改了字段类型还是没解决的以及想把数据库连接配置统一管理、不想在每个脚本里硬编码 host/password 的人。我试过最坑的一次是表已经存在create table被try/except吞掉字段类型根本没变改代码改了半天全是无用功。下面把定位流程拆成可复制的步骤顺带把数据库连接配置和统一 Key 管理一起理清楚。2. 定位 1265 之前先把连接配置和统一 Key 管好排查数据库报错时最怕的就是环境变量、密码、host 散落在十几个脚本里改一个地方漏一个地方。所以在动手查 1265 之前先把连接配置抽出来。TaoToken 在这里的角色是统一管理大模型和工具链的 API Key。当你用 AI 辅助排查 SQL 报错、生成建表语句、或者让 coding agent 帮你改 pymysql 脚本时不需要在每个工具里重复填 Key。官网地址是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 入口是 https://taotoken.net/api 。具体来说你可以去控制台创建一个 Key然后在模型对话里贴上报错堆栈让模型帮你分析字段类型也可以在 coding plan 里让 agent 直接读你的config.toml和建表语句定位num列到底被定义成了什么。API Keys 管理页面可以随时轮换 Key接入文档里有各语言的调用示例。注意TaoToken 管的是 AI 能力的 Key不是数据库密码。数据库的 host/user/password 仍然放在你自己的config.toml里两者不要混。这一步的实际价值当你后面要反复让 AI 帮你检查sql_mode、字段长度、插入值类型时不用每次重新配置环境一个 Key 走通模型对话和 coding agent。3. 可复制配置config.toml 骨架与建表修正3.1 config.toml 骨架把数据库连接和 TaoToken 配置分开写避免混在一起# config.toml [database] host 127.0.0.1 port 3306 user root password your_db_password database quant_invest charset utf8mb4 [taotoken] api_base https://taotoken.net/api api_key sk-你的TaoTokenKey default_model claude-sonnetPython 读取import tomllib # Python 3.11 # 低版本用 pip install tomli然后 import tomli as tomllib with open(config.toml, rb) as f: cfg tomllib.load(f) db_cfg cfg[database] tt_cfg cfg[taotoken]3.2 建表语句的三个致命细节原始代码里建表语句是这样的cursor.execute(create table catering_sale(num varchar primary key,date datetime, sale varchar)这行 SQL 有三个问题varchar没给长度、datetime和插入的字符串不匹配、最后缺右括号。修正后CREATE TABLE IF NOT EXISTS catering_sale ( num VARCHAR(64) NOT NULL, trade_date VARCHAR(32), sale VARCHAR(64), PRIMARY KEY (num) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4;关键点num用VARCHAR(64)而不是INT因为801001.SI这种值根本塞不进整数类型日期字段先用VARCHAR(32)接住后续需要再STR_TO_DATE转换主键用num时确保数据源里没有重复值。3.3 插入语句与类型转换insert_sql INSERT INTO catering_sale (num, trade_date, sale) VALUES (%s, %s, %s) ON DUPLICATE KEY UPDATE sale VALUES(sale) for r in range(len(data)): num str(data.iloc[r, 0]) trade_date str(data.iloc[r, 1]) sale str(data.iloc[r, 2]) cursor.execute(insert_sql, (num, trade_date, sale))ON DUPLICATE KEY UPDATE可以避免主键重复时直接抛IntegrityError 1062比每次手动删表省事。4. 验证请求复现报错、修正字段、重跑插入4.1 先复现 1265在 MySQL 客户端里手动制造一次截断CREATE TABLE test_num (num INT PRIMARY KEY); INSERT INTO test_num (num) VALUES (801001.SI);你会看到ERROR 1265 (01000): Data truncated for column num at row 1这说明num列是INT而插入值是字符串严格模式下 MySQL 拒绝转换。4.2 检查当前表的真实字段类型很多人改了代码但没改表因为create table被try/except吞了。用这条 SQL 看真实结构SHOW CREATE TABLE catering_sale;或者SELECT COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME catering_sale;如果num显示int说明你的建表语句根本没生效表是之前建的。4.3 检查 sql_mode 是否严格SELECT sql_mode;如果结果里包含STRICT_TRANS_TABLES或STRICT_ALL_TABLES那么类型不匹配会直接报错而不是警告。你可以临时关闭来验证SET SESSION sql_mode ;但生产环境不建议关正确做法是改字段类型。4.4 修正字段并重跑ALTER TABLE catering_sale MODIFY num VARCHAR(64) NOT NULL; ALTER TABLE catering_sale MODIFY trade_date VARCHAR(32); ALTER TABLE catering_sale MODIFY sale VARCHAR(64);然后重跑 Python 插入脚本。成功时不会有任何输出用查询验证cursor.execute(SELECT COUNT(*) FROM catering_sale) print(cursor.fetchone())如果返回的行数等于 Excel 行数说明全部入库成功。4.5 用 TaoToken 辅助定位把SHOW CREATE TABLE的结果和报错堆栈一起贴到模型对话里让模型对比字段类型和插入值。或者在 coding plan 里让 agent 直接读你的config.toml和脚本它会指出num列定义和str(num)之间的类型冲突。接入文档里有完整的 API 调用方式API Keys 页面可以管理你的 Key。5. 本篇常见错排查5.1 改了字段类型还是报 1265原因表已存在create table没执行。try/except捕获了异常但没打印你以为建表成功了。解决先DROP TABLE IF EXISTS catering_sale;再建或者用ALTER TABLE改字段。5.2 报 1146 Table doesnt exist原因建表语句缺右括号或语法错误表根本没建成功。解决把 SQL 拿到客户端单独执行看具体语法错误。5.3 报 1062 Duplicate entry原因主键重复。可能是数据源里有重复值也可能是上次插入的数据没删。解决用ON DUPLICATE KEY UPDATE或者插入前TRUNCATE TABLE。5.4 varchar 不写长度varchar不写长度在部分 MySQL 版本里默认长度是 1插入任何超过 1 个字符的值都会截断。必须写varchar(64)这种明确长度。5.5 datetime 字段插入字符串如果字段是datetime插入2020-10-11通常可以但插入20201011或空字符串就会报 1265。排查时先用varchar接住确认数据格式后再改类型。5.6 pandas 的 .ix 已废弃data.ix[r, 0]在新版 pandas 里会报FutureWarning改用data.iloc[r, 0]。这个不直接影响 1265但会让你的排查过程多一层干扰。6. 把 Key 和配置统一后的下一步数据库报错排查完之后建议把config.toml纳入版本管理密码用环境变量覆盖这样换机器时不用重新翻脚本。TaoToken 的 Key 可以在 API Keys 页面随时轮换接入文档里有 Python、Node、curl 的示例。如果你后面要让 agent 自动改 SQL、生成建表语句、或者批量修数据管道可以在 coding plan 里配置长期使用的 Key避免每次手动贴。回到 1265 本身核心就三件事——字段类型对不对、字段长度够不够、表是不是真的按你写的建了。把SHOW CREATE TABLE和SELECT sql_mode这两条命令记住下次再遇到 Data truncated五分钟内就能定位到根因。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

家具厂巡检怎么做?木粉尘、油漆房与除尘三处防爆重点 2026/10/2 23:08:34

家具厂巡检怎么做?木粉尘、油漆房与除尘三处防爆重点

家具厂看着是“木工车间”,实际是三套风险叠在一栋厂房里:木粉尘可燃、油漆与胶粘剂挥发易燃、除尘和热压设备持续发热。巡检如果只盯“机器转不转”,最要命的那条线往往被漏掉。 一、木工车间:粉尘沉积、除尘风道与火星 锯切、…

阅读更多 →
标书写到崩溃?实测4款AI标书工具:WPS AI、百度文库AI、ChatGPT、标捷智写,谁更懂投标人? 2026/10/2 23:08:03

标书写到崩溃?实测4款AI标书工具:WPS AI、百度文库AI、ChatGPT、标捷智写,谁更懂投标人?

做了十几年投标,我太清楚标书人的痛了。凌晨三点对着满屏的技术方案发呆,翻了几百页招标文件找不到评分点对应哪一章,好不容易写出来还被领导批“前后口径不一致”……这些场景,我几乎每个月都要经历一遍。尤其是碰上紧急项目&…

阅读更多 →
C/C++ static 关键字全解析:从存储期、链接属性到类成员与现代 C++ 新特性 2026/10/2 23:08:02

C/C++ static 关键字全解析:从存储期、链接属性到类成员与现代 C++ 新特性

如果有人让我用一个关键字同时考 C 语言和 C 的基础,我一定会选 static。它可能是这两个语言里最分裂的关键字:同一张脸,在不同的位置上干的活完全不一样,活脱脱一个"关键字界的变形金刚"。从 C 语言里的静态局部变量、…

阅读更多 →
会议纪要熬秃头?实测3个月,终于找到这款“能听懂人话”的AI总结神器 2026/10/2 23:08:01

会议纪要熬秃头?实测3个月,终于找到这款“能听懂人话”的AI总结神器

你有没有过这种经历?开了一上午的会,录音文件攒了七八个,回到工位硬着头皮从头听到尾,手打纪要打到手指发麻。好不容易整理完,领导问“客户提的三个核心诉求是什么”,你翻遍几十页笔记愣是没找到重点。更崩…

阅读更多 →
Spring Boot房屋租赁系统实战:从源码到部署全流程解析 2026/10/2 23:07:59

Spring Boot房屋租赁系统实战:从源码到部署全流程解析

自己跑过这类"Java Spring Boot房屋租赁系统"项目的朋友肯定清楚,市面上带源码的项目一大把,但真正到手能一次跑起来、还能应付答辩和面试的,其实没几个。这套房屋租赁系统(源码文档运行视频讲解视频)就是典…

阅读更多 →
Linux基础安全四道防线:账户、权限、服务与日志审计实战 2026/10/2 23:07:58

Linux基础安全四道防线:账户、权限、服务与日志审计实战

如果让我用一句话总结在智榜样平台上把《Linux操作系统基础安全》03模块完完整整学完的感受,那就是:Linux入门教你怎么样把命令敲对,Linux安全教你怎么样不把系统的门开错。这门课解决的不是"会不会用",而是"用的时…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉