vlambda博客
学习文章列表

给自己搭个量化投资系统之五——解决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的版本问题,这个操作没法成功

因此,我选择了新建一个数据库,改变字段类型,然后全部插入进去,比如

给自己搭个量化投资系统之五——解决mysql、python及josn之间的数据类型差异
给自己搭个量化投资系统之五——解决mysql、python及josn之间的数据类型差异

这样的插入是可行的。然后修改一下数据表的名称即可。

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;

需要注意的是它的返回值是

还需要经过一点小处理。

相关链接:

  1. (5月7日)
  2. (5月6日)