Получение datetime.datetime (2019, 4, 24, 20, 40, 57) в качестве значения, но необходимо преобразовать в фактические дату и время - PullRequest
0 голосов
/ 24 апреля 2019

Я запрашиваю базу данных, а затем передаю результаты в функцию для преобразования кортежа в словарь, выполняя следующее:

 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 голосов
/ 25 апреля 2019

Например, ваш вывод:

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
  }
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...