首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MySQL Decimal is not JSON serializable以及插入小数变成0

使用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来操作数据库,这款软件是收费的,很容易破解,当然还是鼓励大家使用正版。

2.7K20
您找到你想要的搜索结果了吗?
是的
没有找到

mysql Decimal 运算;

要定义数据类型DECIMAL的列,请使用以下语法: column_name DECIMAL(P,D); 在上面的语法中: P是表示有效数字数的精度。 P范围1〜65。...D的范围是0~30。MySQL要求D小于或等于P。 与INT数据类型一样,DECIMAL类型也具有UNSIGNED和ZEROFILL属性。...如果使用UNSIGNED属性,则DECIMAL UNSIGNED的列将不接受负值。 如果使用ZEROFILL,MySQL将把显示值填充到0以显示由列定义指定的宽度。...(其中 p总位数, 就和float 与double类型的一样 例如 :amount DECIMAL(6,2);这个表示总共位数有6位,小数占去2位,整数部分为最多4位,最大与最小值9999.99...传decimal 类型数据 让mysql 做计算仍然会出现误差, 最终方案是将其在更新之前 获取结果,最终直接给mysql 传递需要更改的值,做存储就好!!

2.1K30

MySQL数据类型DECIMAL用法

D的范围是0~30。MySQL要求D小于或等于(<=)P。 DECIMAL(P,D)表示列可以存储D位小数的P位数。十进制列的实际范围取决于精度和刻度。...如果使用ZEROFILL,MySQL将把显示值填充到0以显示由列定义指定的宽度。 另外,如果我们对DECIMAL列使用ZERO FILL,MySQL将自动将UNSIGNED属性添加到列。...MySQL允许使用以下语法: column_name DECIMAL(P); 这相当于: column_name DECIMAL(P,0); 在这种情况下,列不包含小数部分或小数点。...column_name DECIMAL; 在这种情况下,P的默认值10。 MySQL DECIMAL存储 MySQL分别为整数和小数部分分配存储空间。 MySQL使用二进制格式存储DECIMAL值。...DECIMAL(5,2)可存储范围是从-999.99到999.99,超出存储范围会报错。 存储数值时,小数位不足会自动补0,首位数字0自动忽略。 小数位超出会截断,产生告警,并按四舍五入处理。

3.3K40

MySQL数据类型DECIMAL详解

言: 当我们需要存储小数,并且有精度要求,比如存储金额时,通常会考虑使用DECIMAL字段类型,可能大部分同学只是对DECIMAL类型略有了解,其中的细节还不甚清楚,本篇文章将从零开始,你讲述DECIMAL...:超出存储范围会报错,小数位不足会自动补0,首位数字0自动忽略,小数位超出会截断 并按四舍五入处理。...(0.11 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> alter table decimal_tb add column col4 decimal...(0.13 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> alter table decimal_tb add column col6 decimal...DECIMAL(5,2)可存储范围是从-999.99到999.99,超出存储范围会报错。 存储数值时,小数位不足会自动补0,首位数字0自动忽略。 小数位超出会截断,产生告警,并按四舍五入处理。

34.9K41

1、判断传入的参数0或整数的多种思路

一、判断字符串是否整数的多种思路 1)使用sed加正则表达式 删除字符串中的所有数值,看字符串长度是否0判断 [ -n "`echo oldboy123|sed 's#[0-9]##g'`" ]...;[ -n "$num" -a "$num" = "${num//[^0-9]/}" ] && echo char || echo int char 4)通过expr计算判断[推荐] expr进行整数计算...0 5)通过双中括号的正则判断 具体用法man bash查看帮助 [[ oldboy123 =~ ^[0-9]+$ ]] && echo int || echo char char [[ 345678123...=~ ^[0-9]+$ ]] && echo int || echo char int 二、判断字符串是否0的多种思路 1) 使用字符串表达式-z和-n [ -z "oldboy" ] && echo...awk '{print length}'` -eq 0 ] && echo "zero" || echo "no zero" 三、扩展:判断传入的参数个数是否满足要求 假如要求传入两个参数,则可以直接判断第二个参数是否

87230

谈谈MySQL如何选择float, double, decimal

前言 我们知道在MySQL中有3种类型可以表示实数,分别是float,double和decimal。关于如何合理得使用这三种类型,网上的答案也层出不穷。...来看这样一个例子 mysql> create table f2 (f1 float(15,2)); Query OK, 0 rows affected (0.01 sec) mysql> insert...sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> select * from f; +-------------+ | f1 | +...但是decimal类型是MySQL官方唯一指定能精确存储的类型,也是DBA强烈推荐和金钱相关的类型都要存储decimal类型,如果猜想decimal类型的存储格式的话,那么一下两种可以保持数据的准确性...继续扩大存储空间,比double更大一个级别,比如128位甚至更多 通过字符串化或者其他的方式特殊存储起来 这两种方式都能实现decimal精确存储,但是由于MySQL指定decimal类型最大长度

4.3K42
领券