2010-08-11 16 views
9

przykładowego modelu:Zapytania o wartości istniejącej w wykazie nieruchomości model w AppEngine

class Foo(db.Model): 
    id = db.IntegerProperty() 
    bar = db.ListProperty(int, required=True) 
  1. Jak mogę kwerendy przy użyciu kwerendy lub GqlQuery zwrócić wszystkie Foo podmioty, które mają określoną wartość w ich właściwości pręt?

  2. Jeśli mam listę identyfikatorów, czy istnieje jeden filtr, który zwróci wszystkie jednostki, których właściwość znajduje się na tej liście?

Odpowiedz

7

1.

Jeśli używasz równa zapytanie na nieruchomości liście, będzie to sprawdzić wszystkie pozycje na liście:

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

2.

można użyć Filtr IN, ale pamiętaj, że wewnętrznie tworzy to kwerendę magazynu danych dla każdego elementu na liście, więc może być powolny, a także może być maksymalnie 30 wewnętrznych zapytań na żądanie.

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

Zobacz Introducing Queries szczegółowe informacje zarówno dla 1 i 2, a ListProperty dalszych szczegółów na 1.

2

Dla tych z Was, którzy lubią mnie nie mógł dostać wyżej odpowiedź do pracy.

Korzystanie gae wersję 1.5.3

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

daje żadnych rezultatów. Podaje jednak wyniki:

.

0

Dodatkowo można także użyć Gql .. może to być rozwój, co wydarzyło się w czasie, ponieważ pytano

Na pytanie 1

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

Na pytanie 2

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

Uważaj na zapytanie. W rzeczywistości wykona N podzapytań (po jednym dla każdego elementu w twojej klauzuli IN). Oto dokumentacja Gql: https://developers.google.com/appengine/docs/python/datastore/gqlreference

Powiązane problemy