3

Google Cloudデータストアライブラリを使用して、柔軟なenvで実行されるNDBとコードを使用してStandal GAE上で実行するコードがあります。どちらも同じエンティティにアクセスします。NDB JsonPropertyとCloud Datastoreライブラリの互換性

ndb.JsonPropertyに問題があります。限り、私はそれらのプロパティを読んでブロブとして格納されているので、私はクラウドライブラリを使用してそのプロパティをシミュレートしようとしました。

read_value = base64.b64decode(from_db_value) 
read_value = json.loads(read_value) 

すべてがこの状況で正常に動作します:私は財産を読むとき

value_to_store = json.dumps(value, separators=[',',':']) 
value_to_store = base64.b64encode(value_to_store) 

反対:店の前に値が、私は次のようにします

Insert using NDB ---> Read using Cloud Library 
Insert using Cloud Library ---> Read using Cloud Library 

しかし、ときに失敗します。

Insert using Cloud Library --> Read using NDB 

これらの種類のプロパティをNDBと互換性を持たせるために格納する正しい方法は何ですか?

ありがとうございました。

+0

クラウドライブラリを使用して挿入された値は、NDBを使用して挿入された値がBlobである間はStringとして保存されているようです。 クラウドデータストアライブラリを使用して値をBlobとして保存する方法を理解する必要があります – Curro

答えて

3

最後に解決策が見つかりました。

ポイントは、ライブラリが文字列として格納しているときに、NDBがblobとして値を格納している点です。

解決策は文字列の値をエンコード/デコードしないだけです。ライブラリはそれを行い、値をBLOBとして保存します。つまり、NDBは期待しています。

執筆:

value_to_store = json.dumps(value, separators=[',',':']) 

読書:

read_value = json.loads(read_value) 

簡単!

関連する問題