App Engine数据存储区与引用过滤器连接

时间:2011-07-12 05:46:56

标签: python google-app-engine gql datastore

我是App Engine数据存储区的新手,我无法理解这一点。 我有这些模型:

class SomeUser(User):
        name = db.StringProperty()

class Group(db.Model):
        title = db.StringProperty()
        date_started = db.DateTimeProperty(auto_now_add=True)

class GroupParticipant(db.Model):
        group = db.ReferenceProperty(Group, collection_name = 'participants')
        participant = db.ReferenceProperty(SomeUser)
        is_owner = db.BooleanProperty()

class SomeUser(User): name = db.StringProperty() class Group(db.Model): title = db.StringProperty() date_started = db.DateTimeProperty(auto_now_add=True) class GroupParticipant(db.Model): group = db.ReferenceProperty(Group, collection_name = 'participants') participant = db.ReferenceProperty(SomeUser) is_owner = db.BooleanProperty() 如何查询数据存储区以获得如下结果:

1 个答案:

答案 0 :(得分:3)

根本没有联接。您必须手动获取所有数据。例如,您可以从GroupParticipant获取所有记录,然后在循环中获取所有GroupSomeUser(请注意,按Key提取非常快)

-

顺便说一下,使用不同的数据结构可能更好,比如

class SomeUser(User):
        name = db.StringProperty()

class Group(db.Model):
        title = db.StringProperty()
        date_started = db.DateTimeProperty(auto_now_add=True)
        owner = db.ReferenceProperty(SomeUser)
        participants = db.ListProperty(db.Key)

在这种情况下,您只需一次查询即可获取所有必需的数据