Движок приложений Google: длина результата get_by_id?

#python #google-app-engine

#python #google-app-engine

Вопрос:

Как мне вернуть длину get_by_id??

Например, у меня есть

 query = Model.get_by_id(1)
  

Я пытался

if len(query) == 1 и if query.count() == 1 оба не работают

Ответ №1:

Model.get_by_id()* возвращает только один объект, если передается один идентификатор, он возвращает список объектов только тогда, когда передается список идентификаторов, что означает, что он, очевидно, не будет иметь len и count.

если вы хотите проверить, не является ли запрос None, вы можете просто указать

 query=Model.get_by_id(1)

if query is not None:
  

если вы хотите получить список объектов на основе ключей, используйте get:

 query = MOdel.get(keys) #here keys is a list of keys

if len(query) == 1  will work now
  

Комментарии:

1. len(query) == 1 будет истинным тогда и только тогда, len(keys) == 1 и, в частности, даже если единственный ключ в keys списке не соответствует реальному объекту хранилища данных.

Ответ №2:

Из http://code.google.com/appengine/docs/python/datastore/modelclass.html#Model_get_by_id:

Если ids представляет собой строку, представляющую одно имя, то метод возвращает экземпляр модели для имени или None, если объект не существует. Если ids представляет собой список, метод возвращает список экземпляров модели со значением None, когда для соответствующего ключа не существует объекта.

Поэтому используйте что-то вроде:

 query = Model.get_by_id(1)
if query is None:
    print 'Not found'
else:
    print 'Returned one result'
  

для нескольких идентификаторов:

 query = Model.get_by_id([1, 2, 3])
count = 0
for item in query:
    if item is not None:
        print 'Found item '   str(item)
        count  = 1
print count
  

Предупреждение: непроверенный