获取datetime.datetime(2019、4、24、20、40、57)作为值,但需要转换为实际日期和时间

时间:2019-04-24 20:50:08

标签: python-3.x datetime

我正在查询数据库,然后通过执行以下操作将结果传递给用于元组到字典转换的函数:

 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调用中。

1 个答案:

答案 0 :(得分:0)

以您的输出为例

MongoDB

如果您使用的是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

如果您使用的是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
  }
]