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

461次阅读

 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,十分头疼。

bson json_util方法解决

bson依赖pymongo 使用python -m pip install pymongo安装

使用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类型。

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

yiywain
版权声明:本文于2021-07-28转载自[python] 查询mysql返回datetime类型数据的处理,共计992字。
转载提示:此文章非本站原创文章,若需转载请联系原作者获得转载授权。