如何在数据存储区(AppEngine)中获得随机数据?

发布于 2021-01-29 18:37:17

目前我正在使用这样的东西:

    images = Image.all()
    count = images.count()
    random_numb = random.randrange(1, count)
    image = Image.get_by_id(random_numb)

但是事实证明,AppEngine上的数据存储区中的ID不是从1开始的。我在数据存储区中有两个图像,其ID为6001和7001。

有没有更好的方法来检索随机图像?

关注者
0
被浏览
80
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    数据存储是分布式的,因此ID是非顺序的:两个数据存储节点需要能够同时生成ID而不会引起冲突。

    要获得随机实体,可以在创建时将0到1之间的随机浮点数附加到每个实体。然后进行查询,执行以下操作:

    rand_num = random.random()
    entity = MyModel.all().order('rand_num').filter('rand_num >=', rand_num).get()
    if entity is None:
      entity = MyModel.all().order('rand_num').get()
    

    编辑: 根据尼克的建议,更新了失败案例。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看