如何在ndb重复的结构化属性中查找实例

时间:2013-01-09 18:18:03

标签: google-app-engine data-structures python-2.7 app-engine-ndb

当我有一个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

1 个答案:

答案 0 :(得分:2)

所以这就是问题 - entity.instances是一个python列表,按照documentation here。你想要做的更像是一个字典。有一个功能请求,Guido在Google群组中拒绝了,这似乎与您提出的要求相同: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)