python database django django-south django-syncdb

python - ¿Cómo restaurar la tabla caída con django-sur?



database django-south (5)

Quería despejar una tabla en mi base de datos, así que dejé la mesa. Normalmente lo haría manage.py syncdb para volver a crearlo. Sin embargo, la respuesta here dice que ya no se debe usar syncdb . Entonces, ¿qué hago en su lugar?


Asegúrate de que todas tus migraciones estén aplicadas: python manage.py migrate

Dígale a Django que cree las tablas como están en sus modelos: python manage.py syncdb

Dígale al Sur que todo está donde debería estar: python manage.py migrate appname --fake

Esto supone que nada ha cambiado en ninguno de sus modelos desde que creó su última migración.


Es una respuesta bastante tardía, pero para las personas que se encontrarán con el mismo problema (como yo lo hice).

Normalmente, para eliminar los db_tables de la aplicación administrada por south, debe usar:

python manage.py migrate appname zero

Pero si los colocaste manualmente en la base de datos, díselo al sur.

python manage.py migrate appname zero --fake

Y por supuesto recrear las tablas.

python manage.py migrate appname


Hmm este intercambio cubre mi misma pregunta:

Si modifica la base de datos a mano, South no lo notará, es la única forma de hacer un seguimiento de qué versión de la base de datos es la tabla south_migrationhistory, por lo que si se toca la parte posterior, es su responsabilidad repararla.

Lo que terminé haciendo fue comentar el modelo que dejé en cuestión, hacer un schemamigration , crear una tabla vacía sin columnas de la que solté (para que South tenga algo que abandonar), migrate y luego dejar de comentar el modelo. , schemamigration y migrate de nuevo. Un poco más molesto que solo dejar caer la tabla y syncdb pero ah bueno.


Sé que este problema es antiguo, pero acabo de encontrarlo y pensé en publicar mi solución en caso de que esto ayude a alguien.

  1. Ve a la carpeta models.py donde está la base de datos.
  2. Cortar toda la clase del archivo models.py .
  3. Ejecute ./manage.py schemamigration appname --auto (esto creará otra migración donde South reconocerá para eliminar esta tabla). Es posible que deba volver a crear una tabla en blanco en su base de datos para que South vea.
  4. Ejecute la migration y la tabla debería caer de su base de datos.
  5. Vuelva a pegar en su clase de tabla de nuevo a donde estaba en su archivo models.py .
  6. Ejecute un ./manage.py schemamigration appname --auto. El sur debería recoger la mesa y permitirte migrar.
  7. Ejecute ./manage.py migre appname y South debe volver a agregar la tabla a su base de datos ... con las columnas y demás, pero sin los datos, obviamente. :)

Tenía el mismo problema. No estoy seguro de que esto funcione en todas las circunstancias, pero esto es lo que hice:

  1. comentar "sur" de INSTALLED_APPS
  2. ejecutar manage.py syncdb
  3. descomentar "sur" en INSTALLED_APPS
  4. ejecutar manage.py migrate

Voila!

Su experiencia puede ser diferente....