【非常重要】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在生成条件表达式!

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值