python-3.x - 获取 datetime.datetime(2019, 4, 24, 20, 40, 57) 作为值但需要转换为实际日期和时间
问题描述
我正在查询数据库,然后通过执行以下操作将结果传递给函数以进行元组到字典的转换:
r = {}
r = [dict((cursor.description[i][0], value)
for i, value in enumerate(row)) for row in cursor.fetchall()]
return r
这将返回一个字典列表,但我有两列创建了时间并更新了时间。我得到一个具有如下键/值的字典:
{
'recCreatedTimeUTC': datetime.datetime(2019, 4, 24, 20, 40, 57),
'recUpdatedTimeUTC': datetime.datetime(2019, 4, 24, 20, 40, 57),
'userID': 92
}
我怎样才能让 datetime.datetime 正确显示日期?我无法通过 datetime.datetime 运行它,并将这些单词作为值的一部分而不引发错误,而且我不知道如何提取和转换我需要的内容并将其放回去。最终目标是将整个字典转换为字符串并在 API 调用中作为正文返回。
解决方案
以您的输出为例:
MongoDB
如果您使用的是 MongoDB,您可以使用bson
pymongo 内置实用程序来帮助序列化 json:
http ://api.mongodb.org/python/1.10.1/api/bson/json_util.html
示例用法(序列化):
from bson import json_util
import json
r = [{
'recCreatedTimeUTC': datetime.datetime(2019, 4, 24, 20, 40, 57),
'recUpdatedTimeUTC': datetime.datetime(2019, 4, 24, 20, 40, 57),
'userID': 92
}]
json.dumps(r, default=json_util.default)
输出:
[
{
"recCreatedTimeUTC": {
"$date": 1556138457000
},
"recUpdatedTimeUTC": {
"$date": 1556138457000
},
"userID": 92
}
]
姜戈
如果您使用的是 Django,它会提供一个本机 DjangoJSONEncoder 序列化程序,可以正确处理日期时间对象。
请参阅https://docs.djangoproject.com/en/dev/topics/serialization/#djangojsonencoder
自定义默认值
如果您想为编码器使用自定义默认值,您可以这样做:
import datetime
import json
r = []
r = [{
'recCreatedTimeUTC': datetime.datetime(2019, 4, 24, 20, 40, 57),
'recUpdatedTimeUTC': datetime.datetime(2019, 4, 24, 20, 40, 57),
'userID': 92
}]
def default(o):
if isinstance(o, (datetime.date, datetime.datetime)):
return o.isoformat()
print(json.dumps(r, indent=2, default=default))
输出:
[
{
"recCreatedTimeUTC": "2019-04-24T20:40:57",
"recUpdatedTimeUTC": "2019-04-24T20:40:57",
"userID": 92
}
]
推荐阅读
- excel - 从 URL HTTPS 下载 xls 文件
- javascript - Mongoose:尝试在集合中的项目数组中执行 forEach
- ios - for循环(Swift)中的onClick事件不起作用
- c# - 如何屏蔽或替换 XML 中的值?
- ajax - Laravel 5.5 多语言验证
- teradata-sql-assistant - 如何在 teradata SQL Assstant 中创建临时表
- java - 从另一个对象的方法更改对象变量
- java - WSO2 Eclipse Luna 数据映射器加载错误
- reactjs - 将 create React App 部署到共享主机
- scala - 尝试投射坐标矩阵时出现投射异常