给自己搭个量化投资系统之五——解决mysql、python及josn之间的数据类型差异
python的数据类型与mysql的数据类型并不一致,比如mysql中的decimal在python中是无法识别的。
python中也有一些包能很方便的进行数据库的操作,将数据类型的打通封装起来,比如pandas包的数据库操作。
但是,将pandas应用于高频API却会产生内存溢出问题(可参见),采用相对原始的游标去操作数据库时,就不得不面对数据类型不一致的问题,特别是在不能用pandas进行数据中转的情况下。甚至,当数据需要通过json类型进行传输时(API往往需要用到json),datetime直接使用也并不方便,本文分别以decimal和datetime为例,记录两种解决mysql和python数据类型不一致的方法。
方法一:改变数据库类型
理论上我们可以很简单的改变数据库的数据类型,从而使得Python能够理解。比如对于decimal字段col1
alter table table1 alter col1 float;
但可能是我mysql的版本问题,这个操作没法成功
因此,我选择了新建一个数据库,改变字段类型,然后全部插入进去,比如
这样的插入是可行的。然后修改一下数据表的名称即可。
alter table SSEC rename to SSEC2;
alter table SSEC1 rename to SSEC;
当然,也可以直接删除SSEC。
方法二:通过select改变类型
比如datetime类型的数据,查询后得到的数据是datetime.datetime类型,没法转为json。查询完后再对结果进行数据类型的判断和转换也非常麻烦。此时,可以用select的format功能。
select format(d1, '%Y-%m-%d') from table1 XXX;
需要注意的是它的返回值是
还需要经过一点小处理。
相关链接:
-
-
(5月7日) -
(5月6日) -
-