我正在开发基于Google App Engine(Python / Webapp2)和Google NDB数据存储区的Web应用程序。 我假设如果我尝试使用父键添加新实体,则不再存在实体的键,抛出异常。我发现实际上已经创建了实体。 难道我做错了什么?
我可以通过keys_only查询检查父级是否仍然存在。它是否消耗GAE读取配额?
答案 0 :(得分:4)
您可以为任何实体创建一个密钥,无论该实体是否存在。这是因为密钥只是实体类型的编码,也可以是id或名称(以及祖先密钥,如果有的话)。
这意味着您可以在保存父实体之前存储子实体,只要您知道父实体的ID或名称即可。但是,您无法将孩子从父母一方重新分配给另一方。
答案 1 :(得分:0)
至于你的第二个问题,AppEngine pricing page说:
调用数据存储区API会导致以下可计费操作。小型数据存储区操作包括分配数据存储区ID或仅键查询的调用。这些操作是免费的。
对@andrei对第一个问题的回答进行补充,检查Ndb中的无密钥引用以引用现有实体,对于用作父项的密钥以及用作密钥的密钥都是如此实体内的KeyProperty
。