[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类型。
既然这样,直接在查询的时候,指定给我返回字符串类型的数据就好了。这样就不会存在驱动转换数据类型的问题。
[python] 查询mysql返回datetime类型数据的处理的更多相关文章
- 【时区问题】SpringBoot+mybatis查询mysql的datetime类型数据时间差14小时
[时区问题]MyBatis查询MySQL的datetime类型数据时间差14小时 故障解决方式 与数据库连接时,定义时区,避免mybatis框架从mysql获取时区.在连接上加上 serverTime ...
- mybatis查询mysql的datetime类型数据时间差了14小时
场景: 数据库字段: mybatis使用 now() 生成时间. 结果: 使用mybatis查询mysql中的数据时,所有时间都比数据库时间多了14小时,考虑了一下,初步判定是系统时区的问题.因为my ...
- 解决python写入mysql中datetime类型遇到的问题
解决python写入mysql中datetime类型遇到的问题 刚开始使用python,还不太熟练,遇到一个datetime数据类型的问题: 在mysql数据库中,有一个datetime类型的字段用于 ...
- python查询mysql数据(3)
python查询mysql数据(3) """数据查询""" import pymysql import datetime from pymy ...
- python查询数据库返回数据
python查询数据库返回数据主要运用到flask框架,pymysql 和 json‘插件’ #!/usr/bin/python # -*- coding: UTF-8 -*- import pymy ...
- php查询mysql返回大量数据结果集导致内存溢出的解决方法
web开发中如果遇到php查询mysql返回大量数据导致内存溢出.或者内存不够用的情况那就需要看下MySQL C API的关联,那么究竟是什么导致php查询mysql返回大量数据时内存不够用情况? 答 ...
- Python查询Mysql时返回字典结构的代码
Python查询Mysql时返回字典结构的代码 MySQLdb默认查询结果都是返回tuple,输出时候不是很方便,必须按照0,1这样读取,无意中在网上找到简单的修改方法,就是传递一个cursors.D ...
- 解决python中转化成json的方法不能序列化datetime类型数据(转)
Python自带的json.dumps方法序列化数据时候如果格式化的数据中有datetime类型数据时候会提示错误TypeError: datetime.datetime(2012, 12, 12, ...
- PDO 查询mysql返回字段整型变为String型解决方法
PDO 查询mysql返回字段整型变为String型解决方法 使用PDO查询mysql数据库时,执行prepare,execute后,返回的字段数据全都变为字符型. 例如id在数据库中是Int的,查询 ...
随机推荐
- border画梯形
<!doctype html><html lang="en"> <head> <meta charset="UTF-8&quo ...
- IP的计算
IP的计算 时间限制: 1 Sec 内存限制: 32 MB 位无符号整数来表示,一般用点分方式来显示,点将IP地址分成4个部分,每个部分为8位,表示成一个无符号整数(因此不需要用正号出现),如192 ...
- Git使用二:git与svn的区别与工作流程
svn记录的是每一次版本变动的内容,三角形代表改动的内容 git是将每个版本独立保存 git的三棵树:工作区域.暂存区域.git仓库 工作目录:平时存放项目的地方暂存区域:临时存放改动,即将提交到仓库 ...
- Python序列[1,2,3,4,5]
序列是用于存放多个值得连续空间,并按一定顺序排列,每一个值(称为元素)都分配一个数,称为索引或位置.通过该索引可以取出相应的值. 索引 序列中的元素都是有序的.拥有自己编号(从0开始),我们可以通过索 ...
- 关于HTML或JS加密解密的七种方式
本文一共介绍了七种方法: 一:最简单的加密解密 二:转义字符""的妙用 三:使用Microsoft出品的脚本编码器Script Encoder来进行编码 (自创简 ...
- JS脚本计算从某日凌晨开始,经过了多长时间
var a = new Date();//获取现在的时间 var d = Date.parse("Mar 25, 2019");//设定网站建立的时间 var t = a.getT ...
- Ajax增删改查-----------查
查询所有 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF- ...
- SQL 查询表的第一条数据 和 最后一条数据
方法一: 使用TOP SELECT TOP 1 * FROM user; SELECT TOP 1 * FROM user order by id desc; 方法二: 使用LIMIT SELECT ...
- 一脸懵逼学习Zookeeper(动物园管理员)---》高度可靠的分布式协调服务
1:Zookeeper是一个分布式协调服务:就是为用户的分布式应用程序提供协调服务 A.zookeeper是为别的分布式程序服务的 B.Zookeeper本身就是一个分布式程序(只要有半数以上节点存活 ...
- bzoj4520【CQOI2016】K远点对
题解: kd-tree裸题 对每个点维护最近的k个开个堆维护一下