2010-10-20 20 views
2

我需要檢索添加到集合中的最近項目。這是我如何做到這一點:獲取最新數據項 - 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] 

這是一個昂貴的方式來做到這一點?有沒有更好的辦法?

回答

4

如果你打算遍歷一個盒子列表,這是一個非常糟糕的方式來做到這一點。您將爲每個框運行一個附加查詢。你可以很容易地看到Appstats發生了什麼。

如果您正在爲每個請求執行其中一項,則可能是好的。不過這是不理想的。您可能還想使用:lastItem = box.items.order('-date').get()get只會將第一個結果返回給應用程序。

如果可能的話這將是顯著更快的lastItem屬性添加到Box,或Box ID你的屬性)存儲在Item。換句話說,使數據非規範化。如果您要獲取Boxes列表及其最近的項目,您需要需要來使用這種類型的方法。

+0

完美。我爲Box添加了一個lastItem屬性,每次向Box添加項目時都會更新它。那好多了。謝謝。 – Eric 2010-10-21 00:58:17