¿Cuál es la forma más fácil de borrar una base de datos de la CLI con manage.py en Django?

Estoy usando Django para construir un sitio web con MySQL. Ahora, mientras estoy aprendiendo, necesito cambiar el modelo muy a menudo, por lo que quiero que todas las tablas se borren y se cree una nueva.

Pero syncdb no toca las tablas existentes. ¿Hay alguna manera mejor de manejar este problema?

Si no te importan los datos:

La mejor manera sería eliminar la base de datos y ejecutar syncdb nuevamente. O puedes correr:

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 los modelos que aún no se han instalado. Nunca emitirá sentencias ALTER TABLE para hacer coincidir los cambios realizados en una clase de modelo después de la instalación. Los cambios en las clases de modelos y los esquemas de base de datos a menudo implican algún tipo de ambigüedad y, en esos casos, Django tendría que adivinar los cambios correctos para realizarlos. Existe el riesgo de que los datos críticos se pierdan 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árelo 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.

Usando Django Extensions , ejecutando:

 ./manage.py reset_db 

Se borrarán las tablas de la base de datos, luego se ejecutará:

 ./manage.py syncdb 

Los recrearemos (el sur puede pedirte que migres cosas).

Creo que los documentos de Django mencionan explícitamente que si la intención es comenzar de nuevo desde una base de datos vacía (lo que parece ser la intención de OP), simplemente suelte y vuelva a crear la base de datos y vuelva a ejecutar la migrate (en lugar de usar flush ):

Si prefiere comenzar desde una base de datos vacía y volver a ejecutar todas las migraciones, debe eliminar y volver a crear la base de datos y luego ejecutar la migración en su lugar.

Entonces, para el caso de OP, solo necesitamos:

  1. Eliminar la base de datos de MySQL
  2. Recrear la base de datos
  3. Ejecutar python manage.py migrate

Más rápido (suelta y crea todas las tablas incluyendo datos):

 ./manage.py reset appname | ./manage.py dbshell 

Precaución:

  • Podría no funcionar correctamente en Windows.
  • Podría mantener algunas mesas viejas en la db