¿Cómo reiniciar db en Django? Recibo un error de comando 'restablecer' no encontrado


99

Siguiendo este tutorial de Django por ejemplo aquí: http://lightbird.net/dbe/todo_list.html

El tutorial dice:

"Esto cambia el diseño de nuestra tabla y tendremos que pedirle a Django que reinicie y vuelva a crear las tablas:

manage.py reset todo; manage.py syncdb"

aunque, cuando corro manage.py reset todo, aparece el error:

$ python manage.py reset todo                                       
- Unknown command: 'reset'

¿Es esto porque estoy usando sqlite3 y no postgresql?

¿Alguien puede decirme cuál es el comando para restablecer la base de datos?

El comando: python manage.py sqlclear tododevuelve el error:

$ python manage.py sqlclear todo    
CommandError: App with label todo could not be found.    
Are you sure your INSTALLED_APPS setting is correct?

Así que agregué 'todo' a mi INSTALLED_APPS en settings.py y volví a ejecutar python manage.py sqlclear todo, lo que resultó en este error:

$ python manage.py sqlclear todo                                      
- NameError: name 'admin' is not defined

Respuestas:


154

resetha sido reemplazado por flushcon Django 1.5, ver:

python manage.py help flush

4
Desafortunadamente, esto no funciona en aplicaciones individuales como lo hizo manage.py reset <appname>. Da como resultado un error: CommandError: Command no acepta ningún argumento
Andre

5
Afortunadamente, alguien lo portó de nuevo a 1.5 :)
robertklep

gracias, es bueno saberlo, reciente (última modificación hace 6 meses) la documentación pública de django sobre los accesorios todavía (2019-07-11) habla sobre 'restablecer': code.djangoproject.com/wiki/Fixtures
vchrizz

34

Parece que la respuesta 'flush' funcionará en algunos casos, pero no en todos. Necesitaba no solo vaciar los valores en la base de datos, sino recrear las tablas correctamente. Todavía no estoy usando migraciones (primeros días), así que realmente necesitaba eliminar todas las tablas.

He encontrado dos formas de eliminar todas las tablas, ambas requieren algo diferente al núcleo de django.

Si está en Heroku, elimine todas las tablas con pg: reset:

heroku pg:reset DATABASE_URL
heroku run python manage.py syncdb

Si puede instalar extensiones de Django, tiene una forma de hacer un reinicio completo:

python ./manage.py reset_db --router=default

6
@jonalv, primero debes instalar django-extensions .
edjroot

6
Además, debe incluirlo INSTALLED_APPSen settings.py.
Max Candocia

21

Similar a la respuesta de LisaD, Django Extensions tiene un gran comando reset_db que descarta totalmente todo, en lugar de simplemente truncar las tablas como lo hace "flush".

python ./manage.py reset_db

El simple hecho de vaciar las tablas no estaba solucionando un error persistente que ocurría cuando estaba eliminando objetos. Hacer un reset_db solucionó el problema.


1
Esto era lo que estaba buscando, pero no tuve que dar un --routerargumento, ¿tal vez eso sea opcional ahora, cinco años después? :)
maldito


11

Si desea limpiar toda la base de datos, puede usar: python manage.py flush Si desea limpiar la tabla de la base de datos de una aplicación Django, puede usar: python manage.py migrate appname zero


9

Con django 1.11, simplemente elimine todos los archivos de migración de la migrationscarpeta de cada aplicación (todos los archivos excepto__init__.py ). Luego

  1. Elimina manualmente la base de datos.
  2. Crea manualmente la base de datos.
  3. correr python3 manage.py makemigrations.
  4. Corre python3 manage.py migrate.

Y voilla, su base de datos se ha restablecido por completo.


si usa sqlite, no es necesario crear manualmente la base de datos, python3 manage.py makemigrationsy python3 manage.py migratese encargará de eso, al menos en django 2.0
toto_tico

4

Para mí, esto resolvió el problema.

heroku pg:reset DATABASE_URL

heroku run bash
>> Inside heroku bash
cd app_name && rm -rf migrations && cd ..
./manage.py makemigrations app_name
./manage.py migrate

3

Solo un seguimiento de la respuesta de @ LisaD .
A partir de 2016 ( Django 1.9), debe escribir:

heroku pg:reset DATABASE_URL
heroku run python manage.py makemigrations
heroku run python manage.py migrate

Esto le dará una nueva base de datos dentro de Heroku.


1
  1. Simplemente elimine manualmente su base de datos. Asegúrese de crear una copia de seguridad primero (en mi caso, db.sqlite3 es mi base de datos)

  2. Ejecuta este comando manage.py migrate


1
python manage.py flush

eliminado el contenido antiguo de la base de datos,

No olvide crear un nuevo superusuario:

python manage.py createsuperuser
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.