Как преобразовать строку в дату в rethinkdb с помощью python?

Моя rethinkdb хранит данные в следующем формате.

data = [{
      'appName': "app1",
      'startTime': "Mon, 14 Feb 2017 05:10:00 GMT",
      'endTime': "Mon, 14 Feb 2017 05:15:00 GMT",
      'status': "SUCCESS"
    },
    {
      'appName': "app1",
      'startTime': "Mon, 13 Feb 2017 05:10:00 GMT",
      'endTime': "Mon, 13 Feb 2017 05:15:00 GMT",
      'status': "FAILED"
    },
    {
      'appName': "app2",
      'startTime': "Mon, 13 Feb 2017 05:10:00 GMT",
      'endTime': "Mon, 13 Feb 2017 05:15:00 GMT",
      'status': "RUNNING"
    }]

Мне нужно получить последнюю информацию для всех приложений.

r.table('apps').group('appName').max('startTime').run()

Но поскольку мой startTime хранится в виде строки, я не могу выполнить максимальную операцию.

Я попытался обновить значения в таблице следующим образом:

r.table('apps').update({'startTimeDate': pytz.timezone('Europe/Rome').localize(datetime.strptime(r.row['startTime'], '%a, %d %b %Y %H:%M:%S GMT'))}).run()

Я получаю сообщение об ошибке:

TypeError: должна быть строка, а не скобка

Как сохранить startTime и endTime как дату в rethinkdb из строки?


person Sajani    schedule 23.02.2017    source источник


Ответы (1)


RethinkDB поддерживает только даты в формате ISO8601 или количество секунд, прошедших с эпохи UNIX.

Ваш запрос update имеет правильную идею, но он пытается использовать функции python внутри update, где row['startTime'] — это фрагмент запроса, а не строка.

Вместо этого может работать что-то вроде этого:

for app in r.table('apps').run():
  date = (pytz.timezone('Europe/Rome')
              .localize(datetime.strptime(app['startTime'],
                                          '%a, %d %b %Y %H:%M:%S GMT'))
  (r.table('apps')
    .get(app['id'])
    .update({'startTimeDate': date},
            durability='soft')
  ).run()
r.table('apps').sync()
person AtnNn    schedule 12.03.2017