加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

django 从指定数据库中指定表随机抽取数据

发布时间:2020-12-15 17:13:58 所属栏目:大数据 来源:网络整理
导读:django 从指定数据库中指定表随机抽取数据 第一种方法:使用order_by Article.objects.all().order_by('?')[:10] 这个方法,在数据表中数据量过大时,速度慢,在表数据量过大时,可能会导致线上mysql崩溃。 django文档:https://docs.djangoproject.com/en/d

django 从指定数据库中指定表随机抽取数据

第一种方法:使用order_by

Article.objects.all().order_by('?')[:10]

这个方法,在数据表中数据量过大时,速度慢,在表数据量过大时,可能会导致线上mysql崩溃。

django文档:https://docs.djangoproject.com/en/dev/ref/models/querysets/#order-by-fields

第二种方法:使用Count

from?django.db.models.aggregates?import?Count
from?random?import?randint

class?PaintingManager(models.Manager):
????def?random(self):
????????count?=?self.aggregate(count=Count('id'))['count']
????????random_index?=?randint(0,?count?-?1)
????????return?self.all()[random_index]

class?Article(models.Model):
????objects?=?UsersManager()??????

#?使用????
Article.objects.random()

第三种方法:利用id索引获取(建议使用)

import?random

my_ids?=?Article.objects.values_list('id',?flat=True)
my_ids?=?list(my_ids)
n?=?2
rand_ids?=?random.sample(my_ids,?n)

random_records?=?Article.objects.filter(id__in=rand_ids)

这个方法还是和第一个方法一样弊端,如果表数据量过大,会比较吃资源

第四种方法:

import?random

max_number?=5
article_obj?=?Article.objects.last()
rand_ids?=?random.sample(range(article_obj.id),?max_number?*?4)

random_articles?=?Article.objects.filter(id__in=rand_ids).values('id',?'title')[:max_number]

这个方法优于第三种,至于为什么取想要的数量的四倍,是防止部分id被删除,而无法取到数据。

https://stackoverflow.com/questions/962619/how-to-pull-a-random-record-using-djangos-orm

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读