キーでフィルタリングすることはできません。おっと、私はそれについて間違っていました。キーと他のプロパティを同時に処理するようにインデックスを設定している場合は、それをフィルタリングできます。次のようになります。
key = db.Key.from_path('MyModel', 'keyname')
MyModel.all().filter("__key__ =", key).filter('foo = ', 'bar')
また、一連のメソッドを使用して、キー、キーID、またはキー名で多数のモデルを検索することもできますget
。
# if you have the key already, or can construct it from its path
models = MyModel.get(Key.from_path(...), ...)
# if you have keys with names
models = MyModel.get_by_key_name('asdf', 'xyz', ...)
# if you have keys with IDs
models = MyModel.get_by_id(123, 456, ...)
この方法で多くのエンティティをフェッチできます。正確な制限はわかりません。いずれかのキーが存在しない場合は、None
そのエンティティのリストにが表示されます。
キーだけでなくいくつかのプロパティでフィルタリングする必要がある場合は、2つのステップでそれを行う必要があります。キーを取得してプロパティを確認するか、プロパティをクエリしてキーを検証します。
フェッチ後のフィルタリングの例を次に示します。filter
Queryクラスのメソッドは使用しないことに注意してください。代わりに、リストをフィルタリングするだけです。
models = MyModels.get_by_key_name('asdf', ...)
filtered = itertools.ifilter(lambda x: x.foo == 'bar', models)