¿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
Prem
fuente
Posible duplicado de ¿Cuál es la forma más fácil de borrar una base de datos de la CLI con manage.py en Django?
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

Respuestas:

154

resetha sido reemplazado por flushcon Django 1.5, ver:

python manage.py help flush
Robertklep
fuente
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
LisaD
fuente
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.

aendrew
fuente
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
17

si está usando Django 2.0 Entonces

python manage.py flush 

trabajará

Vaibhav Gupta
fuente
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

Abhijeet Padhy
fuente
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.

Gursimran Singh
fuente
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
gritar
fuente
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.

ene
fuente
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

bikram
fuente
1
python manage.py flush

eliminado el contenido antiguo de la base de datos,

No olvide crear un nuevo superusuario:

python manage.py createsuperuser
Thusitha Deepal
fuente