zoukankan      html  css  js  c++  java
  • [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类型。

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

  • 相关阅读:
    Github 上 36 个最实用的 Vue 开源库
    C 语言快速入门,21 个小项目足矣!「不走弯路就是捷径」
    18个挑战项目带你快速入门深度学习
    Linux 运维入门到跑路书单推荐
    Python 网络爬虫的常用库汇总
    45 个常用Linux 命令,让你轻松玩转Linux!
    [新手必备]Python 基础入门必学知识点笔记
    快速入门 Python 数据分析实用指南
    18位不重复订单号
    相对路径转绝对路径
  • 原文地址:https://www.cnblogs.com/oDoraemon/p/7019163.html
Copyright © 2011-2022 走看看