【发布时间】:2014-02-13 12:55:07
【问题描述】:
上下文:
我正在开发一个网络应用程序。 如果我不使用祖先,则在立即插入 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', *),但不知道怎么做。
有可能吗?
【问题讨论】:
-
你试过祖先查询吗?因为无论深度如何,它都匹配所有孩子。另外,如果你刚刚插入了一个实体,那么你就有了key,如果你需要做一个后续更新,为什么不通过key来获取item,那么它将是一致的。
标签: python google-app-engine app-engine-ndb