2017-02-23 48 views
1

我的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: must be string, not Bracket

如何堅持startTime和結束時間的日期rethinkdb從字符串?

回答

0

RethinkDB僅支持格式化爲ISO8601或作爲從unix新紀元的秒數​​日期。

update查詢有正確的想法,但它會嘗試使用update,其中row['startTime']是一個查詢片段,而不是一個字符串中的Python函數。

像這樣的東西可能不是工作:

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() 
相關問題