Flask-SQLAlchemy插入MySQL时999999999被转为1000000000.0的问题求助
问题原因及解决方案
问题根源
MySQL的FLOAT是单精度浮点数,有效精确位数仅为6-7位。999999999是9位数字,超出了它的精确表示范围,因此会被自动近似为最接近的可表示浮点数1000000000.0,负数同理。
解决办法
改用DECIMAL定点数类型(推荐)
DECIMAL是定点数类型,能精确存储指定范围内的数值,完全适配你的需求。操作步骤:
- 修改Flask-SQLAlchemy模型中的字段定义:
# 替换原来的db.Float为DECIMAL,参数(10, 0)表示总位数10、小数位0,可根据实际需求调整 amount = db.Column(db.DECIMAL(10, 0)) - 执行数据库迁移命令:
flask db migrate -m "修改amount字段为DECIMAL类型" flask db upgrade
修改后,999999999这类数值就能被精确存储,不会出现近似转换的问题。
临时应急方案(不推荐)
如果暂时无法修改字段类型,可尝试将数值转为字符串存储,但后续进行数值计算时需要额外处理,容易引入新问题,因此不建议长期使用。
内容的提问来源于stack exchange,提问作者Haki
相关产品推荐
相关产品推荐

