2017-10-27 4 views
0

私はfrom google.cloud import datastoreを実行することによって得られるものであるpython用のGoogleクラウドデータストアライブラリを使用しています(より具体的には申し訳ありませんが、ndbを含む3つまたは4つの異なるライブラリがあります)。問題は、TextPropertyを保存しようとすると、BytesPropertyがbase64エンコードされたデータとして終了することです。私は、データストアで見たときGoogle Cloud Datastore Pythonライブラリ - エンティティプロパティをバイトではなくTextPropertyに強制しますか?

from google.cloud import datastore 
    expiration_date = plan.get('expiration_date') 
    ds = datastore.Client() 
    dt = datetime.datetime.utcnow() 
    key_str= "%s:%s:%s" % (user_id, camera_id, dt.isoformat()) 
    complete_key = ds.key('RollingPlanCounter', key_str) 
    rolling_counter = datastore.Entity(key=complete_key, exclude_from_indexes=['byte_counts']) 
    byte_counts = json.dumps({ 
     'upload_bytes_total': 0, 
     'movie_bytes_total': 0, 
     'event_bytes_total': 0, 
     'upload_bytes_total_important': 0, 
     'movie_bytes_total_important': 0, 
     'event_bytes_total_important': 0 
    }) 
    rolling_counter.update({ 
     "user_id": user_id, 
     "camera_id": camera_id, 
     "creation_date": dt, 
     "expiration_date": expiration_date, 
     "byte_counts": str(byte_counts) 
    }) 

以下のコードでは、しかし、私は、これはTextPropertyないバイトがあるべきライブラリへの「ヒント」を持っていますどのようにこの

base64 data

参照してください?

答えて

1

このページ(https://googlecloudplatform.github.io/google-cloud-python/latest/datastore/usage.html#module-google.cloud.datastore)、特にこの部分「テキスト」(Python2の 'ユニコード' のpython3の 'STR')の 'STRING_VALUE' にマップされ

注プロパティ値によれば、データストア;値は "bytes"(Python2の 'str'、Python3の 'bytes')は 'blob_value'にマップされます。

TextPropertyであることを知るには、キャストしてUnicodeにキャストする必要があります。だから私がしなければならなかったのはこれでした

byte_counts = json.dumps({ 
     'upload_bytes_total': 0, 
     'movie_bytes_total': 0, 
     'event_bytes_total': 0, 
     'upload_bytes_total_important': 0, 
     'movie_bytes_total_important': 0, 
     'event_bytes_total_important': 0 
     'events_important_count': 0, 
     'movies_important_count': 0 
     'movies_discarded_count': 0 
    }) 
    rolling_counter.update({ 
     "user_id": user_id, 
     "camera_id": camera_id, 
     "creation_date": dt, 
     "expiration_date": expiration_date, 
     "byte_counts": unicode(byte_counts, "utf-8") # <-- here 
    }) 

そして、データストアはテキストプロパティとして保存されていることを示します。

関連する問題