1.6 KiB
1.6 KiB
快速修复:批次ID类型错误
错误信息
(asyncmy.errors.DataError) (1264, "Out of range value for column 'batch_id' at row 1")
原因
batch_id 字段类型为 INTEGER,但时间戳值 1767883391558 超出了 INTEGER 的最大值 2147483647。
解决步骤
1. 执行数据库修复(必须)
mysql -u root -p your_database < fix_batch_id_bigint.sql
或者手动执行:
ALTER TABLE test_work_order
MODIFY COLUMN batch_id BIGINT NULL COMMENT '工单批次ID(用于分组标识)';
2. 重启后端服务(必须)
# 停止后端服务
# 启动后端服务
3. 验证修复
-- 查看字段类型
DESCRIBE test_work_order;
-- 应该看到:
-- batch_id | bigint | YES | | NULL |
4. 测试
- 进入样品管理页面
- 选择样品,点击"生成工单"
- 填写工单名称,提交
- 应该成功,不再报错
技术说明
INTEGER vs BIGINT
- INTEGER: -2147483648 到 2147483647
- BIGINT: -9223372036854775808 到 9223372036854775807
时间戳计算
# 毫秒级时间戳
batch_id = int(datetime.now().timestamp() * 1000)
# 例如:1767883391558(超出 INTEGER 范围)
SQLAlchemy 类型映射
Integer→ MySQLINTBigInteger→ MySQLBIGINT
已修改的文件
- ✅
fix_batch_id_bigint.sql- 数据库修复脚本 - ✅
add_workorder_batch_field.sql- 更新为 BIGINT - ✅
test_work_order_do.py- 使用 BigInteger - ✅
工单批次分组功能实现说明.md- 更新文档
完成时间
2026-01-08 22:45