使用Python搭建的web服务,后台读取MySQL数据后,需要将数据序列化为json串,返回给前端。但是如果MySQL的字段是decimal类型,序列化为json串就会遇到麻烦。会报如下错误
raise TypeError(repr(o) + " is not JSON serializable")
TypeError: Decimal('0') is not JSON serializable
HTTP/1.0" 500
网上有一些解决方案,但是如果你对于数据精度的要求没那么高的话,完全可以把MySQL中的decimal字段的类型改为float,float类型是可以直接进行json序列化的。这样只修改数据库,不修改代码,就可以修复问题。参考下图。另外,设置float类型的时候,小数点后一定要设置,可以设置为4,表示带4位小数。否则默认可能是带0位小数,就不准确了。如果你insert的数据类似‘0.022’这种,在数据库中就变成0了。
建议使用Navicat for MySQL来操作数据库,这款软件是收费的,很容易破解,当然还是鼓励大家使用正版。鼠标右击表的名称,选择“设计表”,然后你会看到上面的图片内容,里面可以修改字段类型,长度,增加索引等,比语句操作方便多了。