Así que obtuve la base de datos.objects.all() y database.objects.get ('nombre'), pero ¿cómo conseguiría obtener un elemento aleatorio de la base de datos. Tengo problemas para tratar de encontrar la forma de obtenerlo o seleccionar un elemento aleatorio.¿Cómo tomar un elemento aleatorio de una base de datos en Django/postgreSQL?
Respuesta
Seleccionar un elemento aleatorio de una lista de todos los objetos de la base de datos no es una solución goog, ya que recuperar todos los elementos de la base de datos puede tener un gran impacto en el rendimiento, como tampoco se usa .
La mejor solución debe ser para recuperar un elemento con un índice de azar:
import random
random_idx = random.randint(0, Model.objects.count() - 1)
random_obj = Model.objects.all()[random_idx]
La solución de Aamir seleccionará todos los objetos antes de descartar todos menos uno. Esto es extremadamente inútil y, además, este tipo de cálculo debe hacerse en la base de datos.
model.objects.all().order_by('?')[0]
Leer más aquí: https://docs.djangoproject.com/en/dev/ref/models/querysets/#order-by
Editar: La respuesta de lazerscience es de hecho más rápido, como se muestra here.
Esto también es bastante lento, como se puede leer en el enlace que ya ha proporcionado: 'Nota: order_by ('?') Consultas pueden ser costoso y lento ...' Don –
lo haría un poco diferente. Los querysets son perezosos de todos modos en django.
import random
def get_my_random_object():
object = random.choice(model.objects.all())
return object
https://docs.djangoproject.com/en/dev/topics/db/queries/#querysets-are-lazy https://docs.djangoproject.com/en/dev/ref/models/querysets/#when-querysets-are-evaluated
'random.choice()' llama a 'len (queryset)' (como se ve en ['random.py'] (https://hg.python.org/cpython/file/3985104e2290/Lib/random.py#l253)). Esto evaluará el queryset completo y lo extraerá a la memoria antes de elegir un solo elemento. – knbk
- 1. Elija un elemento aleatorio de una tabla
- 2. ¿Cómo selecciono un elemento aleatorio de una matriz en Python?
- 3. Seleccionar un elemento aleatorio de una enumeración en D
- 4. elemento aleatorio en un mapa
- 5. ¿Cómo mantener un subconjunto aleatorio de una secuencia de datos?
- 6. Obtener elemento aleatorio de hashset?
- 7. Obtiene un elemento aleatorio de una colección secuencial
- 8. Escogiendo un elemento aleatorio de un conjunto
- 9. Seleccione un elemento aleatorio de una lista ponderada
- 10. registro aleatorio de la base de datos MySQL con CodeIgniter
- 11. Líquido: ¿Puedo obtener un elemento aleatorio de una matriz?
- 12. Objeto aleatorio de la base de datos con GORM
- 13. Copiar datos de una tabla en una base de datos a otra base de datos separada
- 14. Cómo obtener un registro aleatorio de la base de datos MS Access
- 15. dibujar elemento aleatorio en numpy
- 16. Estructura de datos para un mundo aleatorio
- 17. Ver si un elemento aparece más de una vez en una columna de base de datos
- 18. ¿Cómo seleccionar un elemento aleatorio en std :: set?
- 19. SQL Script para tomar una base de datos Microsoft Sql en línea o fuera de línea?
- 20. Obtener elemento aleatorio y eliminarlo
- 21. Tomar datos POST de UIWebView
- 22. Acceso al elemento aleatorio en la lista
- 23. ¿Cómo elegir un elemento de lista aleatorio en una función pura?
- 24. ¿Almacena datos de imagen en una base de datos MySQL?
- 25. ¿Cómo deshacerse de múltiples columnas en una base de datos?
- 26. Elegir el elemento aleatorio de una matriz Actionscript 3
- 27. ¿Cómo crear un proyecto de base de datos desde una base de datos SQL Server existente?
- 28. Migrar una base de datos de desarrollo MySQL a una base de datos de producción
- 29. Obtener un elemento aleatorio en la lista vinculada de una sola dirección mediante una sola poligonal
- 30. ¿Qué tan lejos puedo tomar este diseño de base de datos?
¿Crees que Model.objects.all() es costoso? Verme la respuesta editada. –
¿Tiene una explicación/punto de referencia que muestre que esto es más rápido que order_by ('?') [0]? Sé lo que dicen los documentos, pero la clave aquí es que el DB seleccionará solo 1 ítem y la velocidad sería efectivamente la misma (dado un motor razonablemente inteligente de DB). order_by ('?') sería realmente lento solo si realmente está buscando más de una fila ... – Delyan
@AamirAdnan: Por supuesto, el costo dependerá de su número de registros y es posible que funcione bien con unos pocos registros, pero también si usas 'values_list' y digamos millones de registros, django necesitará obtener el' id' de cada objeto. –