ETest-Vue-FastAPI/QUICKFIX_批次ID类型错误.md

1.6 KiB
Raw Permalink Blame History

快速修复批次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. 测试

  1. 进入样品管理页面
  2. 选择样品,点击"生成工单"
  3. 填写工单名称,提交
  4. 应该成功,不再报错

技术说明

INTEGER vs BIGINT

  • INTEGER: -2147483648 到 2147483647
  • BIGINT: -9223372036854775808 到 9223372036854775807

时间戳计算

# 毫秒级时间戳
batch_id = int(datetime.now().timestamp() * 1000)
# 例如1767883391558超出 INTEGER 范围)

SQLAlchemy 类型映射

  • Integer → MySQL INT
  • BigInteger → MySQL BIGINT

已修改的文件

  • fix_batch_id_bigint.sql - 数据库修复脚本
  • add_workorder_batch_field.sql - 更新为 BIGINT
  • test_work_order_do.py - 使用 BigInteger
  • 工单批次分组功能实现说明.md - 更新文档

完成时间

2026-01-08 22:45