GAE Ndb:pre_put_hook中的事务?或者如何动态生成唯一ID

时间:2018-01-03 21:43:23

标签: google-app-engine transactions google-cloud-datastore unique-id

在Ndb数据存储区中,给定实体具有属性num,该属性应该是唯一ID,但与Ndb的本机ID相反,它不能是一个庞大的数字,但应该被分配等于当前num值的最大值加1。

换句话说,您可以这样指定:

last_entity = MyEntity.query().order(-MyEntity.num).get()
max_num = last_entity.num
new_num = max_num + 1

你想在@transactional范围内这样做,直到你把()新创建的实体放入。

分配num属性(如果尚未设置)似乎是_pre_put_hook()中的一个好地方。但我不认为我可以在_pre_put_hook()函数内开始一个事务,该事务将构成实体的最终put()。

那么如何最好地处理?

另一种方法是定义一个assign_num_and_put()函数来打开一个事务(比如在父实体上做一个get),然后找到max_num,为新实体分配max_num + 1,然后执行put( ),都在交易中。

0 个答案:

没有答案