myqueryset = Content.objects.filter(random 100)
Respuesta
Content.objects.all().order_by('?')[:100]
Véase el order_by docs. También tenga en cuenta que este enfoque no escala bien (de hecho, escala muy, muy mal). Consulte this SO answer para conocer mejor la selección aleatoria cuando tiene grandes cantidades de datos.
Si va a hacer esto más de una vez, debe diseñar esto en su base de datos.
Si lo hace una vez, puede pagar la multa considerable. Esto te da exactamente 100 con propiedades aleatorias realmente buenas. Sin embargo, usa mucha memoria.
pool= list(Content.objects.all())
random.shuffle(pool)
object_list = pool[:100]
Aquí hay otro algoritmo que también es lento porque puede buscar en toda la tabla. No utiliza mucho la memoria en absoluto y no puede conseguir exactamente 100.
total_count= Content.objects.count()
fraction = 100./total_count
object_list = [ c for c in Content.objects.all() if random.random() < fraction ]
Si quieres hacer esto más de una vez, es necesario agregar un atributo al contenido para permitir el filtrado eficaz para "al azar " valores. Por ejemplo, puedes hacer esto.
class Content(models.Model):
... etc. ...
def subset(self):
return self.id % 32768
Esto dividirá sus datos en 32768 subconjuntos distintos. Cada subconjunto es 1/32768'th de sus datos. Para obtener 100 elementos aleatorios, necesita 100 * 32768/subconjuntos total_count de sus datos.
total_count = Content.objects.count()
no_of_subsets= 100*32768/total_count
object_list = Content.objects.filter(subset__lte=no_of_subsets)
Ésta es rápida y es reproducible. Los subconjuntos son "arbitrarios", no técnicamente "aleatorios".
Buen punto para el rendimiento –
Me gusta su último enfoque, aunque no creo que pueda filtrar las propiedades. Tendría que agregar la columna del subconjunto en el modelo en sí y establecer su valor en guardar de esta manera: http://ifacethoughts.net/2009/07/14/calculated-fields-in-django/ – jesal
Añadir subconjunto como método para el modelo de contenido no es suficiente para filtrar, como se sugiere en el último fragmento. –
yo: sólo se
import random
object_list = list(Content.objects.filter(foo=bar).values()[:100])
random.shuffle(object_list)
consulta se ejecuta una sola sencilla MySQL y es bueno en el rendimiento.
Esto no devuelve registros aleatorios de la base de datos. Selecciona el primer centenar de registros y los mezcla. Los registros 101 en adelante no tienen posibilidad de ser seleccionados. – Blair
Quise sugerir el uso de la función de mezcla sobre order_by ('?') Que tiene serios problemas de rendimiento: http://stackoverflow.com/a/6405601/232649 Para mezclar todos los registros: shuffle (list (Content.objects) .all())) [: 100] – Pratyush
- 1. ¿Cómo consultar 10 registros únicos aleatorios en la base de datos mysql?
- 2. ¿Cómo selecciono 10 elementos aleatorios de una lista en PHP?
- 3. ¿Cómo selecciono los registros de menos de 1 año?
- 4. ¿Cómo selecciono 2 elementos aleatorios de un conjunto de Python?
- 5. 100% en la base de datos HSQL en memoria
- 6. Obtenga registros aleatorios con Doctrine
- 7. ¿Cómo copiar la base de datos en uso a otra base de datos en django?
- 8. ¿Cómo seleccionar los primeros registros 'N' de una base de datos que contiene millones de registros?
- 9. PostgreSQL selecciona 20 registros aleatorios
- 10. mysql selecciona SOLAMENTE registros duplicados de la base de datos
- 11. Imagen de la tienda django en la base de datos
- 12. ¿Cómo obtener registros al azar de la base de datos de Oracle?
- 13. Migraciones de base de datos en la producción de django
- 14. Eliminar registros más antiguos de la base de datos
- 15. Encontrar huecos (registros faltantes) en los registros de la base de datos usando SQL
- 16. Insertar registros de conjunto de datos en la base de datos
- 17. ¿Cómo selecciono de varias tablas en una consulta con Django?
- 18. Cargar la plantilla django de la base de datos
- 19. Alterar las tablas de la base de datos en Django
- 20. Incrementando valores en la base de datos de django
- 21. Consultar N registros aleatorios en el almacén de datos de Appengine
- 22. Inyección de configuración de base de datos Heroku: ¿cómo configuro mi base de datos dev django?
- 23. ¿Cómo selecciono una estrategia de combinación para una base de datos de git?
- 24. ¿Cómo selecciono una base de datos MySQL para usar con PDO en PHP?
- 25. Almacenamiento de los registros de la base de datos en la matriz
- 26. Obtención de 3 registros aleatorios de una tabla
- 27. Django Lista desplegable dinámica de la base de datos
- 28. django: actualizar esquema de base de datos sin perder datos
- 29. cómo puedo actualizaciones Top 100 registros en el servidor SQL
- 30. Django: ¿cómo selecciono una columna particular de un modelo?
Y el all() es redundante, pero nunca lo recuerdo. – Tom
¡Esto es asombroso! A través de la depuración, he notado que incluso genera una buena consulta, solo tomando 20 elementos, usando 1 consulta, usando ORDER BY RAND() para al azar. Dios mío, eso es fantástico. –