前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python采用并发查询mysql以及调用API灌数据 (六)- 解决datetime序列化json格式问题

Python采用并发查询mysql以及调用API灌数据 (六)- 解决datetime序列化json格式问题

作者头像
Devops海洋的渔夫
发布2019-05-31 16:26:54
7870
发布2019-05-31 16:26:54
举报
文章被收录于专栏:Devops专栏Devops专栏

前情回顾

上一篇文章已经编写了mysql查询以及生成请求api的body数据,那么本章节我们来继续编写解决body序列化json过程中的datetime转化问题。

实战任务

本次因为服务架构重构,表优化、重构,带来的任务就是需要从原来的mysql数据库中,读取原表数据(部分存在多张关联查询)然后通过调用API的服务方式灌入新的数据库表中(包含mysql、mongodb)。

执行流程如下

那么根据流程所需要的功能,需要以下的实例进行支撑: 1.并发实例 2.查询数据实例 3.执行post请求实例

目标:解决datetime序列化json问题

问题现象

代码语言:javascript
复制
TypeError: datetime.datetime(2018, 11, 27, 16, 0, 21) is not JSON serializable

解决方法

代码语言:javascript
复制
import datetime

    ## 转化datetime类型为str类型
    print type(api_body["lastModifyTime"].strftime("%Y-%m-%d %H:%M:%S"))
  
    ## 判断是否datetime类型
    if isinstance(api_body["lastModifyTime"],datetime.datetime):
        print "datetime类型"

    if isinstance(api_body["userId"],datetime.datetime):
        print "datetime类型"
    else:
        print "不是datetime类型"

只要有了上面的两个方法,就可以在body循环的过程中转化datetime格式为string类型了。

执行效果如下:

代码语言:javascript
复制
<type 'str'>
datetime类型
不是datetime类型

编写model增加body序列化为json格式的方法

首先将datetime类型的数据转化为str类型,然后直接调用json转格式即可。

代码语言:javascript
复制
    # 根据查询的结果以及字段字典,转化为请求API的body
    def convertApiBody(self,result,dict_fields):
        # 循环生成每条查询数据的请求body
        body = {}
        for result in result:
            for field in result:
                if field == "null":
                    body[field] = None
                else:
                    body[field] = result[field]
        # 更新body的字段为新表的字段
        new_body = {}
        for key, value in dict_fields.items():
            # print "key = %s , value = %s" % (key, value)
            if key == "null":
                new_body[value] = None
            elif isinstance(body[key],datetime.datetime): # 将datetime类型转str,解决json的序列化问题
                new_body[value] = body[key].strftime("%Y-%m-%d %H:%M:%S")
            else:
                new_body[value] = body[key]
        return new_body

调用执行一个post请求看看:

好了,插入成功了。

在这上面的过程,只插入了一条数据,真正的场景中是需要循环插入数据的,那么把执行post请求的方法进行循环执行。

下一个篇章,来看看循环执行以及如何并发处理请求。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.11.29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档