我在app engine ndb查询的结果中遇到了奇怪的行为。
模型(简化):
class Trainer(polymodel.PolyModel):
user = ndb.KeyProperty(kind='User')
使用查询收集一整套对象(约100-200):
trainers = Trainer.query()
在此阶段,单个教练对象具有有效的用户对象 可以通过以下方式获得:
user = trainer.user.get()
培训师集合分为几个中间python列表。
之后,大多数教练对象的None
值都为.user
。
这段代码曾经工作了好几年。有没有其他人遇到ndb.KeyProperty
这样的问题?当数据集变得太大时,关键属性是否可能被清除?
答案 0 :(得分:0)
事实证明,有一些KeyProperty字段的键无处指向(悬挂指针的种类)。
然而,最大的问题是Trainers对象在延迟调用中被用作参数,因此thos对象必须以某种方式序列化(可能使用pickle)。然而,过去关联的关键属性可能是因为时间不同,方法不再适用。将训练对象的urlsafe键作为参数传递给被保护的函数解决了这个问题。