9

サンプルモデル:

  class Foo(db.Model):
     id = db.IntegerProperty()
     bar = db.ListProperty(int, required=True)
  1. QueryまたはGqlQueryを使用してクエリを実行し、 barプロパティに特定の値を持つすべてのFooエンティティを返すにはどうすればよいですか?

  2. IDのリストがある場合、 idプロパティがそのリストにあるすべてのエンティティを返す単一のフィルターはありますか?

4

3 に答える 3

7

1.1。

リストプロパティでequalsクエリを使用すると、リスト内のすべてのアイテムがチェックされます。

search = 2
results = Foo.all().filter('bar =', search).fetch()

2.2。

INフィルタを使用できますが、これにより内部的にリスト内の各アイテムのデータストアクエリが作成されるため、処理が遅くなる可能性があり、リクエストごとに最大30の内部クエリが存在することに注意してください。

items = [1, 2, 3]
results = Foo.all().filter("id IN", items).fetch()

1と2の両方の詳細についてはクエリの紹介を、1の詳細についてはListPropertyを参照してください。

于 2010-08-11T05:18:32.123 に答える
2

上記の答えを得ることができなかった私のようなあなたのそれらのために。

gaeバージョン1.5.3を使用する

results = Foo.all().filter('bar =', search).fetch()

結果はありません。だが

results = Foo.all().filter('bar =', search).fetch(100)
results = Foo.all().filter('bar =', search)

結果を出します。

于 2011-09-15T11:38:22.113 に答える
0

さらに、Gqlを使用することもできます。これは、質問が行われてからの間に起こった開発である可能性があります。

質問1の場合

wheres = 2
pageSize = 10
qry = db.GqlQuery("SELECT * FROM Foo WHERE bar = :1", wheres)
Foos = qry.fetch(pageSize)

質問2の場合

wheres = [ 1, 3, 44, 101 ]
pagesize = 10
qry = db.GqlQuery("SELECT * FROM Foo WHERE bar IN (:1)", wheres)
Foos = qry.Fetch(pageSize)

ただし、inクエリには注意してください。実際にはN個のサブクエリを実行します(IN句の要素ごとに1つ)。Gqlのドキュメントは次のとおりです:https ://developers.google.com/appengine/docs/python/datastore/gqlreference

于 2013-05-07T03:13:15.413 に答える