3

当我有一个 NDB 重复属性时,我必须遍历列表以找到我正在寻找的属性。当我查看数据存储时,结构化属性的每个属性都是一个列表。我以为我可以使用 Python 列表索引方法,但这不起作用。

那么有没有一种简单的方法可以找到我需要的结构化属性实例。

class Instance(ndb.Model)
    instance_id = ndb.StringProperty()
    instance_data = ndb.TextProperty()

class Example(ndb.Model):
    instances = ndb.StructuredProperty(Instance, repeated = True)

我试过了:

instance_id = 'thisone'
index = entity.instances.instance_id.index(instance_id)
data =  entity.instances.instance_data[index]

但我不得不:

instance_id = 'thisone'
for each in entity.instances :
    if each.instance_id = instance_id :
        instance_data = each.instance_data
        break
4

1 回答 1

2

所以这是问题所在 - entity.instances 是一个 python 列表,根据文档here。你想要做的更像是一个字典。Guido 在 Google Group 中拒绝了一项功能请求,这似乎与您所要求的相同:https ://groups.google.com/d/topic/appengine-ndb-discuss/Kj7Ymhr5hlE/discussion

entity.instances[0] 返回该列表中的第一个实例。所有其他 List 操作似乎也可以正常工作。但是您正在尝试有效地查询该列表。

如果您已经知道 ID 是什么并且您的列表很大,那么您始终可以将该 ID 设置为键并调用数据存储以获取该实例。当您创建实例时,请执行以下操作:

new_instance = Instance(id=instance_id, instance_data=some_data)

然后像这样加载它:

existing_instance = Instance.get_by_id(instance_id)
于 2013-01-10T02:43:43.723 回答