NDB:如何进行部分祖先匹配?

时间:2014-02-13 12:55:07

标签: python google-app-engine app-engine-ndb

上下文:

我正在开发一个网络应用。 如果我不使用祖先,在立即插入新的ndb.Model值后尝试更新元素不会获取新值。 但是,使用祖先,我会得到一致的结果。

但是,我想制作一个项目层次结构。

示例:

class Office(ndb.Expando):
  name = ndb.StringProperty()

鉴于办事处:

HQ = Office(key=ndb.Key('Office', '0'), name='HQ')
BR1 = Office(key=ndb.Key('Office', '0','Office', 'BR1'), name='Branch 1')
BR2 = Office(key=ndb.Key('Office', '0', 'Office', 'BR2'), name='Branch 2')
BR1S1 = Office(key=ndb.Key('Office', 'S1'), name='Branch 1 Sector 1')
BR1S2 = Office(key=ndb.Key('Office', 'S2'), name='Branch 1 Sector 2')
BR2S1 = Office(key=ndb.Key('Office', 'S1'), name='Branch 2, Sector 1')
BR2S1 = Office(key=ndb.Key('Office', 'S2'), name='Branch 2, Sector 2')

我无法获得强大的一致性,因为它们都是根祖先。

鉴于办事处:

HQ = Office(key=ndb.Key('Office', '0'), name='HQ')
BR1 = Office(key=ndb.Key('Office', '0','Office', 'BR1'), name='Branch 1')
BR2 = Office(key=ndb.Key('Office', '0', 'Office', 'BR2'), name='Branch 2')
BR1S1 = Office(key=ndb.Key('Office', '0', 'Office', 'BR1','Office', 'S1'), name='Branch 1 Sector 1')
BR1S2 = Office(key=ndb.Key('Office', '0', 'Office', 'BR1','Office', 'S2'), name='Branch 1 Sector 2')
BR2S1 = Office(key=ndb.Key('Office', '0', 'Office', 'BR2','Office', 'S1'), name='Branch 2, Sector 1')
BR2S1 = Office(key=ndb.Key('Office', '0', 'Office', 'BR2','Office', 'S2'), name='Branch 2, Sector 2')

我也无法从单个查询中获取所有内容,因为祖先参数只能完全匹配。

我想查询祖先ndb.Key('Office', '0', *),但还没弄明白该怎么做。

有可能吗?

1 个答案:

答案 0 :(得分:0)

请参阅Ancestor Querys

key = ndb.Key(BlogPost, 12345)
qry = Comment.query(ancestor=key)

所以你的例子是

key = ndb.Key(Office, 0)
qry = Office.query(ancestor=key)