Google App Engine与BigTable的递归关系

5 投票
1 回答
1397 浏览
提问于 2025-04-15 11:59

在一个经典的关系型数据库中,我有以下这个表:

CREATE TABLE Person(
    Id int IDENTITY(1,1) NOT NULL PRIMARY KEY,
    MotherId int NOT NULL REFERENCES Person(Id),
    FatherId int NOT NULL REFERENCES Person(Id),
    FirstName nvarchar(255))

我想把这个表转换成一个Google App Engine的表。我的问题出在MotherId和FatherId这两个字段上。我尝试了下面的代码,但没有成功。Python说它不知道对象类型Person。

class Person(db.Model):
    mother = db.ReferenceProperty(Person)
    father = db.ReferenceProperty(Person)
    firstName = db.StringProperty()

有没有人知道我们如何在Google App Engine的表中建模一个递归关系?我该如何绕过App Engine的限制呢?

更新
我想把问题扩展一下……如果我想添加一组孩子呢?

children = db.SelfReferenceProperty(collection_name='children_set')
dad.children.append(childrenOne)

我试过这样做,但不行。你们觉得我哪里做错了?

谢谢!

1 个回答

10

我觉得你这里需要用到自引用属性(SelfReferenceProperty)。

class Person(db.Model):
    mother = db.SelfReferenceProperty(collection_name='mother_set')
    father = db.SelfReferenceProperty(collection_name='father_set')
    firstName = db.StringProperty()

另外,你也可以把母亲和父亲的关系放在不同的类里。

撰写回答