2010-08-11 2 views
9

Модель образца:запрашивая значения, существующие в модели списка недвижимости в AppEngine

class Foo(db.Model): 
    id = db.IntegerProperty() 
    bar = db.ListProperty(int, required=True) 
  1. Как я могу запросить с помощью либо запроса или GqlQuery вернуть все Foo объекты, которые имеют заданное значение в их бар собственности?

  2. Если у меня есть список идентификаторов, есть ли один фильтр, который будет возвращать все объекты, чье свойство id находится в этом списке?

ответ

7

1.

При использовании равенства запрос на свойства списка, он будет проверять все элементы в списке:

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

2.

Вы можете использовать IN, но обратите внимание, что внутренне это делает запрос хранилища данных для каждого элемента в списке, поэтому он может быть медленным, и также имеется не более 30 внутренних запросов для каждого запроса.

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

См Introducing Queries подробности как для 1 и 2, а также ListProperty для получения более подробной информации о 1.

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) 

дает результаты.

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) 

Тем не менее, обратите внимание на запрос. Он фактически выполнит N подзапросов (по одному для каждого элемента в разделе IN). Вот документация Gql: https://developers.google.com/appengine/docs/python/datastore/gqlreference

Смежные вопросы