数据存储App Engine查询祖先python

时间:2014-09-03 23:23:28

标签: python google-app-engine google-cloud-datastore

您好我是Datastore和Python上的新手,我有一个基本问题,但它可以帮助我更多地了解Google云。

我有4个实体,让我们说我有一个孩子的父母(匹配):团队,球员和事件。

class Team(ndb.Model):
    d_name = ndb.StringProperty()
    d_side = ndb.StringProperty()

class Player(ndb.Model):
    d_name = ndb.StringProperty()
    date_of_birth = ndb.StringProperty()
    d_position = ndb.StringProperty()
    d_teamKey = ndb.StringProperty()


class Match(ndb.Model):
    d_competition_name = ndb.StringProperty()
    d_date = ndb.StringProperty()
    d_pool = ndb.StringProperty()
    d_season = ndb.StringProperty()
    d_team1Key = ndb.StringProperty()
    d_team2Key = ndb.StringProperty()
    d_winning_teamKey = ndb.StringProperty()
    d_match_id = ndb.StringProperty()
    d_match_day = ndb.IntegerProperty()

class Event(ndb.Expando):
    d_teamKey = ndb.StringProperty()
    d_playerKey = ndb.StringProperty()

我知道如果我想要所有比赛第4天的查询是:

q = ndb.gql("SELECT * FROM Match WHERE d_match_day = 4")

但是我如何能够在这些比赛的孩子中找到所有球员,以便我拥有在第4天比赛中所有球员?

谢谢!

2 个答案:

答案 0 :(得分:1)

将另一个属性添加到MatchStructuredProperty,这是一个玩家(和/或小组)列表:

Players = ndb.StructuredProperty(Player)
Teams =   ndb.StructuredProperty(Team)

然后,您可以查询4并提取玩家和/或小组列表。

答案 1 :(得分:0)

等等....你把小孩的球员添加到他参加的每场比赛中?这似乎是无效的设计。一个孩子只能有一个父母(除非我严重误解了祖先的查询,这是可能的,这是公平的)。

无论如何,在一个单一的查询中,我不认为这是可行的。我会从d_match_day = 4的匹配开始获取密钥,然后从那里做一个" select * from Players,match_key ="并使用您刚刚创建的列表。 (你可能需要更改match_key以匹配你的实际祖先密钥,但它的主旨就在那里)