前情回顾
上一篇文章已经编写了mysql查询以及生成请求api的body数据,那么本章节我们来继续编写解决body序列化json过程中的datetime转化问题。
实战任务
本次因为服务架构重构,表优化、重构,带来的任务就是需要从原来的mysql数据库中,读取原表数据(部分存在多张关联查询)然后通过调用API的服务方式灌入新的数据库表中(包含mysql、mongodb)。
执行流程如下
那么根据流程所需要的功能,需要以下的实例进行支撑:
1.并发实例
2.查询数据实例
3.执行post请求实例
目标:解决datetime序列化json问题
问题现象
2018, 11, 27, 16, 0, 21) is not JSON serializable
解决方法
## 转化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类型了。
执行效果如下:
type 'str'>
编写model增加body序列化为json格式的方法
首先将datetime类型的数据转化为str类型,然后直接调用json转格式即可。
# 根据查询的结果以及字段字典,转化为请求API的body
def convertApiBody(self,result,dict_fields):
# 循环生成每条查询数据的请求body
for result in result:
for field in result:
if field == "null":
None
else:
# 更新body的字段为新表的字段
for key, value in dict_fields.items():
# print "key = %s , value = %s" % (key, value)
if key == "null":
None
elif isinstance(body[key],datetime.datetime): # 将datetime类型转str,解决json的序列化问题
"%Y-%m-%d %H:%M:%S")
else:
return new_body
调用执行一个post请求看看:
好了,插入成功了。
在这上面的过程,只插入了一条数据,真正的场景中是需要循环插入数据的,那么把执行post请求的方法进行循环执行。
下一个篇章,来看看循环执行以及如何并发处理请求。
如果您觉得不错,请别忘了转发、分享、点赞让更多的人去学习, 您的举手之劳,就是对小编最好的支持,非常感谢!
小编有话说
宁愿跑起来被拌倒无数次,也不愿规规矩矩走一辈子。就算跌倒也要豪迈的笑。
目前10000+人已关注加入我们
关注公众号回复【资料】即可获得python、php、java、前端等视频资源