2010-10-20 22 views
2

Je dois récupérer l'élément le plus récent ajouté à une collection. Voici comment je le fais:Obtention de l'élément de données le plus récent - 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] 

Est-ce une façon coûteuse de le faire? Y a-t-il un meilleur moyen?

Répondre

4

Si vous allez parcourir une liste de boîtes, c'est une très mauvaise façon de le faire. Vous allez exécuter une requête supplémentaire pour chaque boîte. Vous pouvez facilement voir ce qui se passe avec Appstats.

Si vous en faites un par requête, cela peut être correct. Mais ce n'est pas idéal. vous pouvez également utiliser: lastItem = box.items.order('-date').get(). get retournera uniquement le premier résultat à l'application.

Si possible, il serait beaucoup plus rapide pour ajouter une propriété lastItem-Box, ou stocker le Box ID (votre attribut) sur Item. En d'autres termes, dénormaliser les données. Si vous voulez aller chercher une liste de boîtes et leur article le plus récent, vous avez besoin de pour utiliser ce type d'approche.

+0

Parfait. J'ai ajouté une propriété lastItem à Box qui sera mise à jour chaque fois que j'ajouterai un élément à Box. C'est beaucoup mieux. Je vous remercie. – Eric