与 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 的递归关系的主要内容,如果未能解决你的问题,请参考以下文章
Google App Engine 通过内部网络与 Compute Engine 通信
如何将 AJAX 与 Google App Engine (Python) 结合使用
Meteor JS 框架是不是与 Google App Engine 兼容?