如何从Django / postgreSQL中的数据库中获取一个随机项?

时间:2012-02-19 22:56:30

标签: python django postgresql

所以我得到了database.objects.all()和database.objects.get('name')但是如何从数据库中获取一个随机项目。我无法弄清楚如何选择一个随机项目。

3 个答案:

答案 0 :(得分:16)

从所有数据库对象的列表中选择一个随机元素不是goog解决方案,因为检索数据库的所有元素会对性能产生很大影响,而order_by('?')也没有使用{{3}中提到的import random random_idx = random.randint(0, Model.objects.count() - 1) random_obj = Model.objects.all()[random_idx] }}

最佳解决方案应该是检索具有随机索引的元素:

{{1}}

答案 1 :(得分:2)

Aamir的解决方案将在丢弃除一个之外的所有对象之前选择所有对象。这非常浪费,此外,这种计算应该在数据库中完成。

model.objects.all().order_by('?')[0]

在此处阅读更多内容:https://docs.djangoproject.com/en/dev/ref/models/querysets/#order-by

编辑:lazerscience的答案确实更快,如here所示。

答案 2 :(得分:0)

我会做的略有不同。无论如何,django中的查询集都是懒惰的。

import random

def get_my_random_object():
    object = random.choice(model.objects.all())
    return object

https://docs.djangoproject.com/en/dev/topics/db/queries/#querysets-are-lazy https://docs.djangoproject.com/en/dev/ref/models/querysets/#when-querysets-are-evaluated