3

我想parent key在一些使用 MapReduce 的实体中添加一个。如果我理解正确,我不能因为密钥不可编辑。但是,如果我尝试使用以下代码为每个实体创建一个新实体:

a = Analisi(parent=new.key,
            computo=cme.key,
            voce=new.key)
a.put()

我得到这个错误:Analisi() got an unexpected keyword argument 'parent'。如果我尝试分配一个字符串 ID,同样的事情。我错过了什么?

更新:

class Analisi(ndb.Model):
    computo = ndb.KeyProperty(kind=ComputoMetrico)
    voce = ndb.KeyProperty(kind=VoceComputo)

如果我切换到 Expando,我不会收到以下错误,但 Mapreduce 创建了一个名为“父”的属性。似乎 MapReduce 无法管理 ndb 键类实例。我在处理程序中使用mapreduce.input_readers.DatastoreKeyInputReader并转换为 ndb withfrom_old_key()方法:始终工作,除非它必须创建新的 ndb 键。

4

1 回答 1

2

如果您查看 ndb 模型的文档,您会发现 ndb.Model 构造函数使用的语法与 db.Model 不同。要为 ndb.Model 创建祖先路径,请使用关键字“key”和构建祖先路径的 ndb.Key。例如:

ekey= ndb.Key(pairs=[('kind1','id1')('kind2', 'id2')...('entity kind','entityid')])
a = Analisi(key=ekey,
        computo=cme.key,
        voce=new.key)
于 2013-04-11T08:59:13.393 回答