我有使用 NDB 在 Standar GAE 上运行的代码,以及使用 Google Cloud 数据存储库在灵活环境中运行的代码。两者都访问相同的实体。

我在处理 ndb.JsonProperty 时遇到问题。据我所知,这些属性存储为 blob,因此我尝试使用云库来模拟该属性。在存储值之前,我执行以下操作:

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

当我读取属性时则相反:

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

在这种情况下一切正常:

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

但失败时:

Insert using Cloud Library --> Read using NDB 

存储这些类型的属性以使其与 NDB 兼容的正确方法是什么?

谢谢。

请您参考如下方法:

终于找到了解决办法。

重点是 NDB 将值存储为 blob,而库将其存储为字符串。

解决方案只是不对字符串值进行编码/解码,库会这样做并将值存储为 blob,这正是 NDB 所期望的。

写作:

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

阅读:

read_value = json.loads(read_value) 

简单!


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!