我正在处理基于ndb和两个实体(A和B)的谷歌应用引擎应用程序,其中A与B实现了一对多的关系,用这样的属性实现
bobjects = ndb.KeyProperty(repeated=True);
我创建了一个A对象(比如a1)和三个B对象(b1,b2,b3)。 因此,我将b1,b2和b3键添加到a1.objects向量中。 它运行正常,但我已经从数据存储区删除了b1,b2和b3,它们仍然可以在a1(!)中访问。为什么呢?
答案 0 :(得分:1)
为什么他们不会?
KeyProperty存储密钥。没有什么可说的,那些必须是实际存在的实体的关键,甚至是指甚至定义的实体类型的关键。他们只是钥匙。
GAE不是关系数据库,您不应将其视为一个关系数据库。如果您需要保留对其他实体的引用,您需要确保在必要时自己更新这些引用。
答案 1 :(得分:0)
想想你的文件系统的快捷方式/符号链接。
当您为文件创建快捷方式/符号链接然后删除原始文件时 - 快捷方式/符号链接仍然保留在指向不再存在的文件系统上。
文件系统跟踪有史以来创建的每个快捷方式/符号链接都是太昂贵了,如果目的地被删除则删除它们。