2

我需要检索添加到集合中的最新项目。这是我的做法:

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

1 回答 1

4

如果您要遍历一个框列表,这是一种非常糟糕的方法。您将为每个框运行一个附加查询。您可以很容易地看到Appstats发生了什么。

如果您根据请求执行其中一项,则可能没问题。不过这是不理想的。您可能还想使用: lastItem = box.items.order('-date').get(). get只会将第一个结果返回给应用程序。

lastItem如果可能的话,将属性添加到Box或存储Box ID您的属性)会明显更快Item。换句话说,对数据进行非规范化。如果您要获取 Box 列表及其最新项目,则需要使用这种方法。

于 2010-10-20T21:09:13.160 回答