GAE:查找ndb实体的子项

时间:2016-01-07 09:28:06

标签: python google-app-engine foreign-keys

在GAE中,我试图找到一种方法来实现或构造类似于SQL数据库中的外键约束的东西。基本上,不应该允许通过外键约束删除被另一个实体引用的实体(换句话说:如果有孩子引用该父母,则不应该允许删除父母。)

我尝试了ndb数据存储区中的KeyProperty,但这使我无法从我想要删除的实体中找到所有依赖项。 ancestor层次结构似乎也没有削减它。我可以向孩子们查询ancestor,但似乎没有办法从ancestor查询孩子。

有没有办法让GAE ndb数据存储区中的ancestor或其他数据库设计中的子项实现此外键约束?

2 个答案:

答案 0 :(得分:1)

  

有没有办法让孩子从祖先那里获得

是的,它被称为查询,与持有父项密钥的子项中的KeyProperty一起使用,或者将父项作为子项的祖先。

您可以使用无用的祖先查询找到祖先的所有子女,无论其类型如何 - https://cloud.google.com/appengine/docs/python/datastore/queries?hl=en#Python_Kindless_ancestor_queries

数据存储区中没有外键约束。

除了不为你执行删除之外,不确定它是如何“切断”的。

答案 1 :(得分:0)

Tim指出,如果您使用祖先解决方案,您可以轻松查询所有孩子。如果您使用KeyProperty,情况也是如此;您可以轻松查询指向当前键的所有实体:

MyChildModel.all().filter(MyChildModel.my_key_property==my_parent_entity.key)

同样,我们还不清楚这个相当简单的解决方案如何不会削减它#34;。

但值得一提的是,将数据存储区视为关系数据库是一个根本性的错误。它,你不应该尝试。您不能强制执行参照完整性;最终的一致性使得这是不可能的。