【问题标题】:How to select 30 unique random values from database(MySQL) with django?如何使用 django 从数据库(MySQL)中选择 30 个唯一的随机值?
【发布时间】:2011-08-17 19:48:47
【问题描述】:

我读过这个问题:In Django, how do I select 100 random records from the database?
并尝试使用Content.objects.all().order_by('?')[:30],但这会产生一些重复项。那么如何从数据库中选择 30 个唯一随机值?

【问题讨论】:

  • 数以百万计的项目:你能修改你的模型吗?您每次都需要不同的订单吗?您可以在模型中创建int 索引并将randint(MAXINT) 分配给它。然后order_by('randindex')。重置订单是O(n),但可行(例如每小时/每天)。

标签: python mysql database django django-database


【解决方案1】:

如果您在数据库中有可管理数量的条目(即不是数千个),这将起作用,即使它两次访问数据库,它也可能比order_by('?') 更有效。

import random
content_pks = Content.objects.values_list('pk', flat=True)
selected_pks = random.sample(content_pks, 30)
content_objects = Content.objects.filter(pk__in=selected_pks)

【讨论】:

  • 当然选择数千个 id 应该不是问题。它只有一列!
  • 是的,可能应该说“百万”。
  • 我试过这个,发现有问题。当您使用Content.objects.filter(pk__in=selected_pks) 时,结果将与它们在数据库中的顺序相同。我用random.shuffle()来解决。
猜你喜欢
  • 1970-01-01
  • 2017-03-05
  • 2023-03-24
  • 1970-01-01
  • 2019-03-25
  • 1970-01-01
  • 1970-01-01
  • 2012-03-27
  • 2014-02-01
相关资源
最近更新 更多