Google appengine数据存储树结构

时间:2010-04-09 03:38:58

标签: python database google-app-engine

我需要能够在appengine数据库中创建一个类似树的结构 我试图自己创建一个对象引用,但还没有让它工作。

class Item(db.Model):
    children = db.ListProperty(db.ReferenceProperty(Item))

2 个答案:

答案 0 :(得分:3)

或者,您可以使用以下内容存储对父级中子项的引用:

class Node(db.Model):
    children = db.ListProperty(db.Key)

这个答案无耻地被窃取(有信用!)来自Nick Johnson对this related question

的回答

答案 1 :(得分:1)

Here是来自google-appengine群组的相关主题。

您可以在每个子节点中存储对父节点的引用,而不是对父节点中子节点的引用。

以下是一些代码:

class Node(db.Model):
    pass

...snip...

root = Node()
db.put(root)

for i in xrange(10):
    child = Node(parent=root)
    db.put(child)

    for i in xrange(5):
        grandchild = Node(parent=child)
        db.put(grandchild)

parentModel上的一个特殊字段,它告诉数据存储区实体与其父节点具有父子关系。

来自docs

  

当应用程序创建时   实体,它可以分配另一个实体   作为新实体的父级,使用   模型中的父参数   构造函数。将父母分配给   新实体将新实体放入   与父母相同的实体组   实体。

     

没有父级的实体是根实体。作为另一实体的父实体的实体也可以具有父实体。从实体到根的父实体链是实体的路径,路径的成员是实体的祖先。实体的父级是在创建实体时定义的,以后不能更改。