mysql 列未按预期反映小数,而是四舍五入

mysql column does not reflect decimals as expected and instead rounds

我有两列旨在反映纬度和经度,我已经根据 sqlalchemy docs as Numeric. However, in the database, the values are saved as whole numbers. I'm aware there have been several similar questions asked on SO (,,C) 设置了它们,但常见的建议对我没有用。具体来说,在我的 class 中,我指定了如下所示的两列,期望我保存的值将包含 8 个数字,其中 6 个是小数。

xcoord = db.Column(db.Numeric(8,6),nullable=False)
ycoord = db.Column(db.Numeric(8,6), nullable=False)

在我提交值之前,小数按预期传递:

 activity = Activity(xcoord=req['data']['xcoord'],ycoord=req['data']['ycoord'])
    print(activity)
    print('pre-db commit') #results in 40.267299 and -74.618776
    db.session.add(activity) 
    db.session.commit()
    print('committed to db')

但是,鉴于上述语法,在我的 table 中,它被保存为:

'xcoord': -75, 'ycoord': 40,

根据我对上述 sources/documentation 的阅读,我的印象是使用 Numeric 是首选,设置 precision/scale 应该足以满足我的兴趣。我尝试了可用参数的变体,包括 decimal_return_scale=None 和 asdecimal=False 但无济于事。值得注意的是,使用 asdecimal=False 会产生一位小数(例如 75.0),但仍不会产生 6 位小数的预期结果。感谢您阅读到这里,感谢任何建议。

对于将来遇到类似问题的任何人,这最终是@Akina 建议的问题的结果。具体来说,因为我之前使用这些列作为 Int 类型创建了 table,所以它们没有被适当地修改以匹配我的 Flask 运算符。我的 python 脚本中的语法是合适的,当我 运行 MySQL shell 中的以下内容时,问题就解决了。

ALTER TABLE mytablename MODIFY COLUMN xcoord decimal(8,6)
ALTER TABLE mytablename MODIFY COLUMN ycoord decimal(8,6)