Necesito completar mi base de datos con un montón de entradas ficticias (alrededor de 200+) para poder probar la interfaz de administración que he creado y me preguntaba si había una mejor manera para hacerlo. Pasé la mayor parte de mi día ayer tratando de rellenarlo a mano (es decir, envolviendo cosas como esta my_model (title = "asdfasdf", field2 = "laksdj" ...) en un grupo de "para x en el rango (0,200): "bucles" y se dio por vencido porque no funcionó de la manera que yo esperaba. Creo que es necesario usar this, pero ¿no necesita tener datos (existentes) en la base de datos para que esto funcione?Django - Llenando una base de datos con fines de prueba
Respuesta
Comprobar esta aplicación
https://github.com/aerosol/django-dilla/
Digamos que usted escribió la aplicación de blog (oh sí, su favorito!) En Django. Las pruebas unitarias funcionaron bien, y todo funciona extremadamente rápido, incluso las consultas ultra largas de ORM. Has agregado varias publicaciones clasificadas y todavía es estable como una roca. Está bastante seguro de que la aplicación es eficiente y está lista para la implementación en vivo. ¿Derecha? Incorrecto.
Esto es exactamente el tipo de cosa que estaba buscando. ¡Gracias un montón! – cornjuliox
@Eeyore: su respuesta no me deja dormir. – misterte
Puede utilizar accesorios para este fin y el comando de administración loaddata.
Un enfoque es hacerlo así.
Prepare su base de datos de pruebas.
Use dumpdata para crear la exportación JSON de la base de datos.
Ponga esto en el directorio
fixtures
de su aplicación.Escriba sus pruebas unitarias para cargar este "accesorio".
Solo tuve que agregar algunos detalles. –
No estoy seguro de por qué necesita una serialización. Siempre que haya configurado su archivo Django settings.py para que apunte a su base de datos de prueba, rellenar una base de datos de prueba no debe ser más que guardar modelos.
for x in range(0, 200):
m = my_model(title=random_title(), field2=random_string(), ...)
m.save()
Hay mejores formas de hacerlo, pero si desea un conjunto de pruebas rápidas, este es el camino a seguir.
Y se está ejecutando en el contexto del shell, ¿verdad? 'python manage.py shell' – hughdbrown
Django fixtures proporcionan un mecanismo para importar datos en syncdb
. Sin embargo, hacer esta propagación de datos inicial a menudo es más fácil a través del código de Python. La técnica que perfila debería funcionar, ya sea a través de syncdb o un comando de administración. Por ejemplo, a través de syncdb, en my_app/management.py
:
def init_data(sender, **kwargs):
for i in range(1000):
MyModel(number=i).save()
signals.post_syncdb.connect(init_data)
O, en un management command en myapp/management/commands/my_command.py
:
from django.core.management.base import BaseCommand, CommandError
from models import MyModel
class MyCommand(BaseCommand):
def handle(self, *args, **options):
if len(args) > 0:
raise CommandError('need exactly zero arguments')
for i in range(1000):
MyModel(number=i).save()
A continuación, puede exportar estos datos a un dispositivo, o seguir importando usando el comando de gestión. Si elige continuar utilizando la señal syncdb
, querrá ejecutar condicionalmente la función init_data
para evitar que los datos se importen en las siguientes llamadas syncdb
. Cuando un accesorio no es suficiente, personalmente me gusta hacer las dos cosas: crear un comando de administración para importar datos, pero tener la primera invocación syncdb
hacer la importación automáticamente. De esta forma, la implementación es más automatizada, pero aún puedo realizar modificaciones en los datos iniciales y volver a ejecutar la importación.
La aplicación recomendada por la respuesta aceptada es que ya no se mantiene sin embargo django-semilla puede ser utilizado como un reemplazo:
recomendaría django-autofixtures a usted. Intenté tanto django_seed como django-autofixtures, pero django_seed tiene muchos problemas con claves únicas. django-autofixtures se encarga de las restricciones de base de datos únicas, primarias y otras al completar la base de datos
- 1. Base de datos pública de SQL con fines educativos
- 2. https solo con fines de prueba?
- 3. ¿Es posible inyectar simulaciones con fines de prueba con AndroidAnnotations?
- 4. Elija la base de datos de prueba?
- 5. Simular cambios de orientación en iOS con fines de prueba
- 6. Creando datos de prueba en una base de datos
- 7. La base de datos de prueba Django parece vacía mientras se ejecuta la prueba
- 8. amazon s3 cuenta gratuita para desarrolladores con fines de prueba
- 9. Emular el servidor SSH con fines de prueba
- 10. llenando una matriz con número aleatorio
- 11. Implementación sencilla de bases de datos con fines educativos
- 12. ¿En qué casos prueba con una base de datos en memoria en lugar de una base de datos de desarrollo?
- 13. Rellenar las tablas de la base de datos con una gran cantidad de datos de prueba
- 14. Prueba de Phpunit con la base de datos
- 15. ¿Cómo usar la base de datos de prueba con Capybara?
- 16. Diseño de base de datos MySql para una prueba
- 17. Base de datos simulados Objetos vs Prueba
- 18. Django prueba volcado de datos/resultados
- 19. Uso de la base de datos 'anterior' con django
- 20. Recomendar Base de datos gratuita para usar con fines comerciales en la aplicación .net
- 21. ¿Cómo resolver la inyección de dependencia del controlador base para fines de prueba?
- 22. JUnit prueba una falla en la base de datos?
- 23. Cómo destruir automáticamente la base de datos de prueba de django
- 24. Prueba de aplicaciones de Django que usan migraciones del sur
- 25. Migraciones de base de datos en la producción de django
- 26. compartir una base de datos entre el trenzado y Django
- 27. ¿La base de datos de prueba de la unidad Django no está siendo destruida?
- 28. Django: ¿cómo especificar una base de datos para un modelo?
- 29. ¿Cómo le digo a Django que guarde mi base de datos de prueba?
- 30. django: actualizar esquema de base de datos sin perder datos
No desea serializar. Desea crear datos iniciales ejecutando en el shell, guardando las instancias y luego exportando la base de datos a un dispositivo en un formato como json usando loaddata: 'python manage.py dumpdata --format = json --indent = 4 appname' @Matthew Schinckel es el más cercano en esto. – hughdbrown