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

So here's the problem - entity.instances is a python list, as per documentation here. What you are trying to do is more like a dict. There is a feature request that Guido turned down in the Google Group that seems to be the same thing as what you are asking: https://groups.google.com/d/topic/appengine-ndb-discuss/Kj7Ymhr5hlE/discussion

The entity.instances[0] returns the first instance in that list. All other List operations seem to work as well. But you are trying to effectively query that list.

If you already know what the ID is and your lists are large, you could always set that ID as the key and make a call to the datastore to get just that instance. When you create the instance do something like this:

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

and then load it like this:

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