查询结果中的 AppEngine keyProperty 字段在一段时间后获得 None 值
AppEngine keyProperty fields in query results get None value after a while
我在 App Engine ndb 查询的结果中出现了奇怪的行为。
模型(简化):
class Trainer(polymodel.PolyModel):
user = ndb.KeyProperty(kind='User')
通过查询收集了全套对象(约 100-200 个):
trainers = Trainer.query()
A 这个阶段,个别训练对象有一个有效的用户对象
可以通过以下方式获得:
user = trainer.user.get()
培训师集合分为几个中间 python 列表。
在那之后,大多数训练对象都有一个 None
的值 .user
。
这段代码曾经工作了几年。 ndb.KeyProperty
有没有其他人遇到过这样的问题?当数据集变得太大时,关键属性是否可能被清除?
事实证明,有些 KeyProperty 字段的键没有指向任何地方(类似于悬空指针)。
然而,最大的问题是 Trainers 对象被用作延迟调用中的参数,因此这些对象必须以某种方式序列化(大概使用酸洗)。关联的关键属性曾经有效,但是,可能由于不同的时间,该方法不再有效。将训练对象的 urlsafe 键作为参数传递给延迟函数解决了这个问题。
我在 App Engine ndb 查询的结果中出现了奇怪的行为。
模型(简化):
class Trainer(polymodel.PolyModel):
user = ndb.KeyProperty(kind='User')
通过查询收集了全套对象(约 100-200 个):
trainers = Trainer.query()
A 这个阶段,个别训练对象有一个有效的用户对象 可以通过以下方式获得:
user = trainer.user.get()
培训师集合分为几个中间 python 列表。
在那之后,大多数训练对象都有一个 None
的值 .user
。
这段代码曾经工作了几年。 ndb.KeyProperty
有没有其他人遇到过这样的问题?当数据集变得太大时,关键属性是否可能被清除?
事实证明,有些 KeyProperty 字段的键没有指向任何地方(类似于悬空指针)。
然而,最大的问题是 Trainers 对象被用作延迟调用中的参数,因此这些对象必须以某种方式序列化(大概使用酸洗)。关联的关键属性曾经有效,但是,可能由于不同的时间,该方法不再有效。将训练对象的 urlsafe 键作为参数传递给延迟函数解决了这个问题。