如何获得10个随机GAE ndb实体?

时间:2014-02-08 14:35:16

标签: python list google-app-engine random app-engine-ndb

我有以下课程来保存我的记录:

class List(ndb.Model):
    '''
    Index
      Key:              sender
    '''
    sender = ndb.StringProperty()
    ...
    counter = ndb.IntegerProperty(default=0)
    ignore = ndb.BooleanProperty(default=False)

    added = ndb.DateTimeProperty(auto_now_add=True, indexed=False)
    updated = ndb.DateTimeProperty(auto_now=True, indexed=False)

以下代码用于返回我需要的所有实体:

entries = List.query()
entries = entries.filter(List.counter > 5)
entries = entries.filter(List.ignore == False)
entries = entries.fetch()

如何修改代码以从entries获取10个随机记录?我计划每天有一个cron任务来提取随机记录,所以它们应该是随机的。获取这些记录的最佳方法是什么(最小化读取操作次数)?

我不认为以下代码是最好的:

entries = random.sample(entries, 10)

1 个答案:

答案 0 :(得分:3)

在阅读完评论之后,我能看到的唯一改进就是只获取密钥并尽可能限制。

没有经过测试,但同样如此

list_query = List.query()
list_query = list_query.filter(List.counter > 5)
list_query = list_query.filter(List.ignore == False)
list_keys = list_query.fetch(keys_only=True) # maybe put a limit here.

list_keys = random.sample(list_keys, 10)
lists = [list_key.get() for list_key in list_keys]