2017-02-23 1 views
1

私のrethinkdbは、以下のフォーマットでデータを保存します。rethinkdbでPythonを使用して文字列を日付に変換するにはどうすればよいですか?

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は文字列として格納されているため、max操作はできません。

私はエラーが表示さ

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

は、どのように私は、文字列からrethinkdbの日付としてのstartTimeとendTimeのを持続していますか?

答えて

0

RethinkDBは、ISO8601またはUNIXエポックからの秒数でフォーマットされた日付のみをサポートします。

あなたupdateクエリが正しい考えを持っていますが、それはrow['startTime']は、照会フラグメントではなく文字列であるupdate、内部で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() 
関連する問題