Получение самого последнего элемента данных — Google App Engine — Python

Мне нужно получить самый последний элемент, добавленный в коллекцию. Вот как я это делаю:

class Box(db.Model):
    ID = db.IntegerProperty()

class Item(db.Model):
    box = db.ReferenceProperty(Action, collection_name='items')
    date = db.DateTimeProperty(auto_now_add=True)

#get most recent item
lastItem = box.items.order('-date')[0]

Это дорогой способ сделать это? Есть ли способ лучше?


person Eric    schedule 20.10.2010    source источник


Ответы (1)


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

Если вы делаете один из них для каждого запроса, это может быть нормально. Но это не идеально. вы также можете использовать: lastItem = box.items.order('-date').get(). get возвращает приложению только первый результат.

Если возможно, было бы значительно быстрее добавить свойство lastItem к Box или сохранить Box ID (ваш атрибут) в Item. Другими словами, денормализация данных. Если вы собираетесь получить список ящиков и их последний элемент, вам нужно использовать этот тип подхода.

person Robert Kluin    schedule 20.10.2010
comment
Идеально. Я добавил в Box свойство lastItem, которое будет обновляться каждый раз, когда я добавляю элемент в Box. Это намного лучше. Спасибо. - person Eric; 21.10.2010