Si no le importan los datos:
La mejor manera sería eliminar la base de datos y ejecutarla syncdb
nuevamente. O puedes ejecutar:
Para Django> = 1.5
python manage.py flush
Para Django <1.5
python manage.py reset appname
(puede agregar --no-input
al final del comando para que se salte el indicador interactivo).
Si te preocupan los datos:
De los documentos:
syncdb solo creará tablas para modelos que aún no se hayan instalado. Nunca emitirá declaraciones ALTER TABLE para que coincida con los cambios realizados en una clase de modelo después de la instalación. Los cambios en las clases de modelo y los esquemas de la base de datos a menudo implican alguna forma de ambigüedad y, en esos casos, Django tendría que adivinar los cambios correctos para realizar. Existe el riesgo de que se pierdan datos críticos en el proceso.
Si ha realizado cambios en un modelo y desea modificar las tablas de la base de datos para que coincidan, use el comando sql para mostrar la nueva estructura SQL y compárela con su esquema de tabla existente para resolver los cambios.
https://docs.djangoproject.com/en/dev/ref/django-admin/
Referencia: Preguntas frecuentes: https://docs.djangoproject.com/en/dev/faq/models/#if-i-make-changes-to-a-model-how-do-i-update-the-database
La gente también recomienda South ( http://south.aeracode.org/docs/about.html#key-features ), pero no lo he probado.
flush
. intente usarpython manage.py flush
opython manage.py flush --noinput
para omitir el mensaje interactivo.django-admin flush
acuerdo con los documentosUsando extensiones de Django , ejecutando:
Limpiará las tablas de la base de datos y luego ejecutará:
Los recreará (el sur puede pedirle que migre cosas).
fuente
Creo que los documentos de Django mencionan explícitamente que si la intención es comenzar desde una base de datos vacía nuevamente (que parece ser la intención de OP), simplemente suelte y vuelva a crear la base de datos y vuelva a ejecutar
migrate
(en lugar de usarflush
):Entonces, para el caso de OP, solo necesitamos:
python manage.py migrate
fuente
Más rápido (elimina y crea todas las tablas, incluidos los datos):
./manage.py reset appname | ./manage.py dbshell
Precaución:
fuente
reset
ya ejecuta SQL, por lo que no es necesario realizar una canalizacióndbshell
. Si usa elsqlreset
comando, entonces solo imprimirá el SQL, que podría canalizar al shell para su ejecución, pero es un paso innecesario.Puede usar la biblioteca Django-Truncate para eliminar todos los datos de una tabla sin destruir la estructura de la tabla.
Ejemplo:
settings.py
archivo:INSTALLED_APPS = [ ... 'django_truncate', ]
fuente