我有使用 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)
简单!