我正在查询数据库,然后通过执行以下操作将结果传递给用于元组到字典转换的函数:
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调用中。
答案 0 :(得分:0)
以您的输出为例
如果您使用的是MongoDB,则可以使用pymongo内置实用程序中的bson
帮助进行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
}
]