关于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()
将父函数作为参数。因此,您可以假设带有parent参数的allocate_ids()
为给定的父对象保留了一个id范围,而不是为任何父对象保留。在
但是:
^{pr2}$返回̀(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
实际上独立于父键。你可能想知道为什么把父密钥作为参数传递。在
任何人对此都有解释,或者可以指出与这种奇怪行为相关的文档吗?在
{And way}有一个与范围相关的问题{1和范围有关吗?在
我不知道这有什么关系。分配_ID的唯一目的是确保如果您不自己定义一个完整的密钥,GAE不会自动给实体指定特定的ID值。它不做任何其他事情;特别是,它不会对您使用这些id执行的操作施加任何限制。当然没有什么可以阻止您,与您在注释中所说的相反,为两种不同的实体类型使用相同的分配ID值。在
相关问题 更多 >
编程相关推荐