Рекурсивные отношения с Google App Engine и BigTable - PullRequest
5 голосов
/ 02 июня 2009

В классической реляционной базе данных у меня есть следующая таблица:

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?

UPDATE Я хочу немного расширить проблему ... Что если я хочу добавить коллекцию детей?

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

Я попробовал это, и это не работает. Есть идеи, что я делаю не так?

Спасибо!

1 Ответ

10 голосов
/ 02 июня 2009

Я думаю, что вы хотите SelfReferenceProperty здесь

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

Кроме того, вы можете поместить отношения между матерью и отцом в отдельные классы.

...