[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類型。

既然這樣,直接在查詢的時候,指定給我返回字符串類型的數據就好了。這樣就不會存在驅動轉換數據類型的問題。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM