2011-06-26 11 views

Respuesta

90

Si no se preocupan por los datos:

mejor manera sería dejar caer la base de datos y ejecutar syncdb nuevo. O puede 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 omita el modo interactivo, .)

Si le importan los datos:

A partir de los documentos:

syncdb sólo creará tablas para modelos que aún no han sido instalados . Nunca emitirá instrucciones ALTER TABLE para hacer coincidir los cambios realizados con una clase de modelo después de la instalación. Los cambios en las clases de modelos y bases de datos a menudo implican algún tipo de ambigüedad de y, en esos casos, Django tendría que adivinar los cambios correctos que se deben realizar. Existe el riesgo de que datos críticos se pierdan en el proceso .

Si ha realizado cambios en un modelo y el deseo de alterar las tablas de la base a la altura, utilice el comando SQL para pantalla la nueva estructura SQL y Compare esto con la tabla existente esquema para trabajar en los cambios .

https://docs.djangoproject.com/en/dev/ref/django-admin/

Referencia: FAQ - https://docs.djangoproject.com/en/dev/faq/models/#if-i-make-changes-to-a-model-how-do-i-update-the-database

Las personas también recomiendan Sur (http://south.aeracode.org/docs/about.html#key-features), pero no lo han intentado.

+4

Sur es muy, muy bueno para manejo automático de migraciones. Toma un poco de tiempo acostumbrarse, pero ahorra una gran cantidad de caídas y recreación de bases de datos durante el desarrollo, y es imprescindible una vez que su sitio está activo y necesita modificar la estructura db mientras tiene datos valiosos en él. – thepeer

+0

No tengo la opción Restablecer "reinicio de comando desconocido" – user798719

+10

** RESTABLECER COMANDO DEPRECIADO **. En Django 1.5 el comando se ha actualizado a 'flush'. intente utilizar 'python manage.py flush' o' python manage.py flush --noinput' para omitir el aviso interactivo. – agconti

0

más rápida (gotas y crea todas las tablas que incluyen datos):

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

Precaución:

  • podría no funcionar correctamente en Windows.
  • Para guardar algunas tablas antiguas en el PP
+3

'reset' ya ejecuta el SQL, por lo que no es necesario pasar a' dbshell'. Si usa el comando 'sqlreset', entonces eso simplemente imprimirá el SQL, que puede canalizar al shell para su ejecución, pero es un paso innecesario. –

3

Usando Django Extensions, ejecutando:

./manage.py reset_db 

borrará las tablas de bases de datos, a continuación, ejecutar:

./manage.py syncdb 

los vuelve a crear (sur puede pedirte que migres cosas).

+3

reset_db me da un comando desconocido – becko

+1

@becko ejecuta esto primero: pip install django-extensions – FacePalm

0

Creo Django docs mencionan explícitamente que si la intención es partir de una lata vacía de nuevo el DB (que parece ser la intención del OP), entonces simplemente quitar y volver a crear la base de datos y vuelve a ejecutar migrate (en lugar de utilizar flush):

Si prefiere empezar desde una base de datos vacía y volver a ejecutar todas las migraciones, se debe eliminar y reconstruir la base de datos y luego ejecutar migran en su lugar.

Así que para el caso de OP, sólo tenemos que:

  1. gota la base de datos de MySQL
  2. Volver a crear la base de datos
  3. Run python manage.py migrate
Cuestiones relacionadas