与 Google App Engine 和 BigTable 的递归关系

Posted

技术标签:

【中文标题】与 Google App Engine 和 BigTable 的递归关系【英文标题】:Recursive Relationship with Google App Engine and BigTable 【发布时间】:2009-06-02 05:38:04 【问题描述】:

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

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】:

我认为您需要 SelfReferenceProperty 此处

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

或者,您可以将母亲和父亲关系放在不同的类中。

【讨论】:

您还需要设置 collection_name 属性以避免“类人已经具有属性 person_set”错误:mother = db.SelfReferenceProperty(collection_name='mother_set') Father = db.SelfReferenceProperty(collection_name ='father_set') 这真的很酷!我不知道那件事。我如何为一组孩子建模? children = db.SelfReferenceProperty(collection_name='children_set') dad.children.append(childrenOne) 我试过这个,但它不起作用。 :(

以上是关于与 Google App Engine 和 BigTable 的递归关系的主要内容,如果未能解决你的问题,请参考以下文章

GWT与Google App Engine-上传文件

Google App Engine 通过内部网络与 Compute Engine 通信

如何将 AJAX 与 Google App Engine (Python) 结合使用

Meteor JS 框架是不是与 Google App Engine 兼容?

Google App Engine 中的 Datastore 与 Cloud SQL

与 Google App Engine 和 Flask 一起使用时,Angular 路由不起作用