首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python/Django:从大表中获取随机文章

Python/Django:从大表中获取随机文章
EN

Stack Overflow用户
提问于 2010-11-03 07:34:03
回答 2查看 648关注 0票数 4

我的数据库(MySQL)中有一个巨大的表,其中包含数百万个数据。我需要填充10个随机数据,并在UI上显示它。考虑到性能,什么是一个好的方法?

我在考虑创建MySQL视图来填充10个随机行,并从UI中读取它。或者,有没有其他有效的方法来处理这种情况?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-11-03 08:01:39

首先(这是我的正确观点)我反对在我们已经在使用像Django这样的高级框架时使用原始SQL,除非我们在框架( Django )中找不到我们想要的东西,所以我宁愿使用Django来解决这个问题:

请注意,这种方法只有在您将自动递增设置为您的主键时才有效,当然,如果您的数据是一致的(您不会从表中删除记录,以便您可以确保所有if都是自动递增的)

代码语言:javascript
复制
 import random

 # Getting the number of rows in the table it's equivalent to do SELECT COUNT(*).
 count_record = Table.objects.count() 

 # Choose 10 (at most) number from the list of all ids. 
 random_pks = random.sample(range(1, count_record) , min(count_record, 10))

 random_list = Table.objects.filter(pk__in=random_pks)

如果之前设置的条件不满足,我认为您可以使用原始SQL查询来实现,如下所示:

代码语言:javascript
复制
query = """SELECT * FROM table
ORDER BY RAND()
LIMIT 10""")

table.objects.raw(query)

关于性能,我认为你必须对它进行计时,希望这能有所帮助。

票数 2
EN

Stack Overflow用户

发布于 2010-11-03 08:01:55

这可能是昂贵和缓慢的,但是:

代码语言:javascript
复制
MyModel.objects.order_by('?')[:10]

它的主要优点是清晰度,而且它不是原始SQL。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4083040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档