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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |