• [python] 查询mysql返回datetime类型数据的处理


     Python 查询Mysql,如果是datetime类型,在json序列化的时候会出现问题。

    在网上查了一下,解决方案基本都是遍历dict数据,如果是datetime则转化为字符串。

    from datetime import date, datetime
    
    def json_serial(obj):
        """JSON serializer for objects not serializable by default json code"""
    
        if isinstance(obj, (datetime, date)):
            serial = obj.isoformat()
            return serial
        raise TypeError ("Type %s not serializable" % type(obj))

    由于我的数据量很大,后台做循环再返回前端,响应将近40s,十分头疼。

    据说使用json_dump方法可以处理这个问题,但是在我这没起作用。

    from bson import json_util
    import json
    
    json.dumps(anObject, default=json_util.default)

    解决思路:

    想了一下,觉得不如从MySQL下手,让MySQL返回string的数据类型。在SQL引擎下做数据处理,肯定比自己for处理要效率的多。

    MySQL做数据类型转换的函数是CAST。于是将SQL语句变成:

    SELECT country, CAST(date AS CHAR) AS date, peak
    FROM table_peak
    WHERE date < '2015-05-01'
    GROUP BY date, country

    改过之后,响应时间直接变成了10s。考虑到数据有9.1M,算下来速度也有800kb/s。这样一来,网络速度才是主要的效率瓶颈了,数据处理的时间可以忽略不计。

    叨叨:

    在这之前,其实可以想一下,为什么Python能自动识别日期格式的数据并将其转化为datetime?

    我猜原因是MySQL返回数据时,会同时返回数据类型标识,底层驱动监测到数据类型之后,再将数据类型转换为各种语言下对应的数据。如在Python中,date类型就被转成了对应的datetime类型。

    既然这样,直接在查询的时候,指定给我返回字符串类型的数据就好了。这样就不会存在驱动转换数据类型的问题。

  • 相关阅读:
    JavaScript权威设计--Window对象之Iframe(简要学习笔记十四)
    JavaScript权威设计--JavaScript脚本化文档Document与CSS(简要学习笔记十五)
    JavaScript权威设计--CSS(简要学习笔记十六)
    事件处理介绍(简要学习笔记十七)
    事件源,事件对象(简要学习笔记十八)
    XMLHttpRequest(简要学习笔记十九)
    UITextField的placeholder的字体颜色和大小
    UITextField弹出键盘挡住输入框问题
    屏幕适配
    GPUImage的简单使用
  • 原文地址:https://www.cnblogs.com/oDoraemon/p/7019163.html
Copyright © 2020-2023  润新知