Django randomly extracts data from the specified table in the specified database
This method is slow when the amount of data in the data table is too large, and when the amount of data in the table is too large, it may cause online mysql to crash.
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() # usage Article.objects.random()
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)
This method is still the same as the first method. If the amount of data in the table is too large, it will consume more resources.
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]
This method is better than the third method. As for why the number is four times the desired number, it is to prevent part of the id from being deleted and the data cannot be retrieved.