【问题标题】:How to handle parent entity when saving both parent/child entities asynchronously?异步保存父/子实体时如何处理父实体?
【发布时间】:2014-07-05 10:21:43
【问题描述】:
records_to_put = []
events_to_put = []

record = Record.get_or_insert(json_record['record_id'], ... )
records_to_put.append(rec)

event = Event.get_or_insert(json_event['event_id'], parent=record.key)
events_to_put.append(event)

ndb.put_multi_async(records_to_put)
ndb.put_multi_async(events_to_put)

Event 将始终是 Record 的子代。由于异步特性,如果先保存 event 实例,而它的父实例尚未保存,会发生什么情况。它会抛出异常还是允许这样做?

【问题讨论】:

    标签: google-app-engine google-cloud-datastore


    【解决方案1】:

    如果记录实体已经存在,这段代码不会有问题,因为这个实体有一个完整的键。

    如果记录实体是新的,则必须先将其放置,然后才能将其键用于子实体。你会得到一个例外。

    【讨论】:

    • 如果您手动分配 id/key_name 那么您可以安全地在父级之前创建子级。
    • @TimHoffman 我已经更新了问题,并添加了我插入 ID 的方式。在这种情况下,我应该安全正确吗?
    • 是的,如果父密钥不是自动生成的,那么您将始终拥有父密钥的完整密钥。这是唯一阻止先把孩子写出来的事情。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-15
    • 2019-11-24
    • 1970-01-01
    • 2017-08-28
    • 1970-01-01
    • 1970-01-01
    • 2011-10-26
    相关资源
    最近更新 更多