Python Ndb更新Key类型外键字段触发只读错误如何解决
错误原因
- NDB的
Key对象是不可变类型,一旦创建就无法修改其内部的id、kind等属性,所以直接修改sandy.job_key.id会触发只读属性的报错 - 要更新Key类型的字段,不需要修改原有Key对象,直接给字段赋值一个全新构造的Key实例即可
正确实现代码
entity_id = "6341983069011968" entity = ndb.Key('JobApplication', int(entity_id)).get() def update_entity_from_key(key): sandy = key.get() # 直接构造新的Job类型Key,赋值给job_key字段 sandy.job_key = ndb.Key('Job', 5673479999324164) sandy.put() update_entity_from_key(entity.key)
补充说明
- 构造Key的时候第一个参数必须和对应实体的kind名称一致,此处关联的是Job实体,所以kind传
'Job',第二个参数传新的实体id即可 - 如果你的Key是带父级路径的,构造的时候按层级传入参数即可,示例:
ndb.Key('ParentKind', parent_id, 'Job', job_id)
内容的提问来源于stack exchange,提问作者chukwuka mark
相关产品推荐
相关产品推荐

