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

举报
darkpard 发表于 2022/05/19 19:49:03 2022/05/19
【摘要】 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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。