【非常重要】Python-SQLAlchemy之mysql数据库查询条件之注意事项【小数类型decimal总结】

关于数据库的浮点型的增删改查是一个比较头痛的问题,这里总结一下

MySQL中Decimal类型和Float Double等区别

MySQL中存在float,double等非标准数据类型,也有decimal这种标准数据类型。

其区别在于,float,double等非标准类型,在DB中保存的是近似值,而Decimal则以字符串的形式保存数值。
float,double类型是可以存浮点数(即小数类型),但是float有个坏处,当你给定的数据是整数的时候,那么它就以整数给你处理。这样我们在存取货币值的时候自然遇到问题,我的default值为:0.00而实际存储是0,同样我存取货币为12.00,实际存储是12。
幸好mysql提供了两个数据类型:decimal,这种数据类型可以轻松解决上面的问题:decimal类型被 MySQL 以同样的类型实现,这在 SQL92 标准中是允许的。他们用于保存对准确精度有重要要求的值,例如与金钱有关的数据。

为此:在操作和金钱相关的浮动类型我们都使用decimal小数类型,在增删改的时候,是完全没有问题的!但是在查询的时候有一个细节非常重要,否则会因为decimal精度问题而导致查询无法得出你想要的结果【尤其查询等于条件的时候】

比如上面这张表,我们数据库存储的精度是9位或6位小数点,而我们如果使用查询条件为:float数字的时候结果是没问题的,但是如果使用decimal(0.05)小数类型查询数据,可想而知查询不到结果

这里使用float类型的数字做查询条件
buy_order_model.price == 0.05

这里使用的是decimal(0.05)类型做查询条件的条件表达式
buy_order_model.price == 0.05000000000000000277555756156289135105907917022705078125

mysql总结:decimal小数类型适合增删改,但是千万不能做查询条件,查询之前务必先把decimal转换成float在生成条件表达式!

猜你喜欢

转载自blog.csdn.net/weixin_43343144/article/details/91418343