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

Python NDB:如何进行部分祖先匹配?,python,google-app-engine,app-engine-ndb,Python,Google App Engine,App Engine Ndb,背景: 我正在开发一个web应用程序。 如果不使用祖先,则在立即插入ndb的新值后尝试更新元素。模型不会获取新值。 不过,使用祖先,我得到的结果是一致的 但是,我想建立项目的层次结构 例如: class Office(ndb.Expando): name = ndb.StringProperty() 鉴于办公室: HQ = Office(key=ndb.Key('Office', '0'), name='HQ') BR1 = Office(key=ndb.Key('Office', '0'

背景:

我正在开发一个web应用程序。 如果不使用祖先,则在立即插入ndb的新值后尝试更新元素。模型不会获取新值。 不过,使用祖先,我得到的结果是一致的

但是,我想建立项目的层次结构

例如:

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')
我不能得到很强的一致性,因为他们都是祖先

鉴于办公室:

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 = ndb.Key(Office, 0)
qry = Office.query(ancestor=key)

您是否尝试过祖先查询?因为它匹配所有子级,而不考虑深度。另外,如果您刚刚插入了一个实体,那么您就有了密钥,如果您需要执行后续更新,为什么不按密钥获取项,那么它将是一致的。问题是,这只适用于根祖先。如果我尝试key=ndb.KeyOffice,'BR1',我将一无所获。ndb.KeyOffice,'BR1'不是祖先。你真的应该重新阅读关于键的文档,以及构成祖先的内容。您试图在路径中的某个位置匹配一个键,但这是无法完成的。如果要这样做,需要将密钥路径的所有元素存储在重复密钥属性中,然后在该属性中查询密钥。