给自己搭个量化投资系统之五——解决mysql、python及josn之间的数据类型差异
【摘要】 python的数据类型与mysql的数据类型并不一致,比如mysql中的decimal在python中是无法识别的。python中也有一些包能很方便的进行数据库的操作,将数据类型的打通封装起来,比如pandas包的数据库操作。但是,将pandas应用于高频API却会产生内存溢出问题(可参见给自己搭个量化投资系统之四——pandas的使用导致API服务停止),采用相对原始的游标去操作数据库时,...
python的数据类型与mysql的数据类型并不一致,比如mysql中的decimal在python中是无法识别的。
python中也有一些包能很方便的进行数据库的操作,将数据类型的打通封装起来,比如pandas包的数据库操作。
但是,将pandas应用于高频API却会产生内存溢出问题(可参见给自己搭个量化投资系统之四——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;
需要注意的是它的返回值是
还需要经过一点小处理。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)