gpt4 book ai didi

python - 在将实体保存到 ndb 之前通过其键引用实体

转载 作者:行者123 更新时间:2023-11-30 23:27:11 25 4
gpt4 key购买 nike

我希望能够在创建两个实体时将一个类的实体与另一个实体相关联(一个实体将另一个实体作为其父实体,另一个实体将有一个指向另一个实体的键) )。看来我无法在将实体保存到数据存储区之前获取实体的 key 。有没有什么方法可以实现上述目的而不必保存其中一个实体两次?

下面是示例:

class A(ndb.Model):
key_of_b = ndb.KeyProperty(kind='B')

class B(ndb.Model):
pass

我正在尝试做的事情:

a = A()
b = B(parent=a.key)
a.key_of_b = b.key

a.put()
b.put()

如果在保存实体之前未分配 key ,我是否可以自己构建它?有什么方法可以实现这一目标,或者唯一的解决方案是将其中一个实体保存两次?

最佳答案

您可以使用命名键来执行此操作,但您必须确保可以使用唯一键命名两个实体:

# It is possible to construct a key for an entity that does not yet exist.
keyname_a = 'abc'
keyname_b = 'def'
key_a = ndb.Key(A, keyname_a)
key_b = ndb.Key(A, keyname_a, B, keyname_b)

a = A(id=keyname_a)
a.key_of_b = key_b
b = B(id=keyname_b, parent=key_a)

a.put()
b.put()

但是,我建议您首先考虑一下为什么需要 key_of_b 属性。如果您仅将 A 设置为 B 的父级,那么您将始终能够从 A 导航到 B > 反之亦然:

# If you have the A entity from somewhere and want to find B.
b = B.query(ancestor=entity_a.key).get()

# You have the B entity from somewhere and want to find A.
a = entity_b.key.parent().get()

这还使您有机会在 AB 之间创建一对多关系。

关于python - 在将实体保存到 ndb 之前通过其键引用实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22253695/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com