ndb allocate_ids与父级

时间:2015-12-18 14:07:24

标签: python google-app-engine

有很多与Ndb allocate_ids()相关的问题似乎是Ndb中的一个模糊区域,但我发现这个问题无处可去。

使用父/子层次结构时,ids对于给定的父键应该是唯一的,因此您可以创建

entity_1 = MyEntity(parent=my_parent_key_1, id=23)    
entity_2 = MyEntity(parent=my_parent_key_2, id=23)

现在,当您需要为显式赋值分配id时,静态函数MyEntity.allocate_ids()将父级作为参数。因此,您可以假设带有父参数的allocate_ids()为给定父级保留一系列ID,而不为任何父级保留

但是:

MyEntity.allocate_ids(max=1000, parent=ndb.Key(MyParentEntity, 'aaa'))

返回(1L, 1000L)。分配前1000个ID。现在运行:

MyEntity.allocate_ids(max=1000, parent=ndb.Key(MyParentEntity, 'bbb'))

返回(1001L, 1000L),这意味着第一个可用的id是1001L,并且没有分配任何新的,尽管父键是不同的。

现在运行:

MyEntity.allocate_ids(max=2000, parent=ndb.Key(MyParentEntity, 'ccc'))

返回(1001L, 2000L),这意味着分配了从1001到2000的ID。

因此看起来allocate_ids实际上与父键无关。你可能想知道为什么然后将parent_key作为参数传递。

任何人都有此解释,或者可能指向与此奇怪行为相关的文档?

还有一个相关的问题:有没有办法知道通过调用allocate_ids()后保留了哪个id范围(或范围)?

1 个答案:

答案 0 :(得分:1)

我不确定为什么这很重要。 allocate_ids的唯一目的是确保如果您不自己定义完整密钥,GAE不会自动为实体提供某些ID值。它没有做任何其他事情;特别是,它不会对您对这些ID的处理施加任何限制。肯定没有什么可以阻止你,与你在评论中所说的相反,对两种不同的实体类型使用相同的分配ID值。