我在这里看GAE的数据存储示例,除此之外,这让我有点困惑。
def guestbook_key(guestbook_name=DEFAULT_GUESTBOOK_NAME):
"""Constructs a Datastore key for a Guestbook entity with guestbook_name."""
return ndb.Key('Guestbook', guestbook_name)
我理解为什么我们需要钥匙,但为什么'留言簿'是必要的?是这样您可以查询数据存储区中的所有“留言板”对象吗?但是,如果您需要在数据存储区中搜索某种类型的对象,为什么不存在查询(类型(问候语)?)请说明您输入的是ndb.model?
此外,如果您感到慷慨,为什么要创建您正在存储的对象,您是否必须设置父级?
greeting = Greeting(parent=guestbook_key(guestbook_name))
答案 0 :(得分:2)
这就是关键所在:由成对类型和ID组成的路径。关键在于确定它是什么类型。
我不明白你的第二个问题。您不必设置父级,但如果要设置父级,则只能在创建实体时执行此操作。
答案 1 :(得分:2)
首先: GAE数据存储区是所有GAE应用程序同时使用的一个大型分布式数据库。为了区分实体,GAE使用系统范围的密钥。密钥由以下内容组成:
请参阅Key methods(java)以查看密钥中实际存储的数据。
第二:似乎GAE Python API不允许您在没有定义映射到实体类的类的情况下查询数据存储区(我不使用GAE Python,所以我可能错了)。 Java确实有一个low-level API,您无需映射到类即可使用。
第三:您无需为实体定义父级。定义父级是一种定义实体组的方法,这在使用事务时很重要。见ancestor paths和 transactions