Saltar al contenido

Django 1.7 – “No hay migraciones para aplicar” cuando se ejecuta migrar después de realizar migraciones

Anduvimos buscado por distintos espacios para regalarte la respuesta a tu duda, si continúas con preguntas deja un comentario y te responderemos con gusto.

Solución:

  1. En la base de datos MySQL eliminar fila 'profiles' de la mesa 'django_migrations'.
  2. Elimine todos los archivos de migración en la carpeta de migraciones.
  3. Intentar otra vez python manage.py makemigrations y python manage.py migrate mando.

Soy un novato de Django y estaba pasando por el mismo problema. Estas respuestas no me funcionaron. Quería compartir cómo solucioné el problema, probablemente le ahorraría mucho tiempo a alguien.

Situación:

Realizo cambios en un modelo y quiero aplicar estos cambios a la base de datos.

Lo que hice:

Ejecutar en shell:

python manage.py makemigrations app-name
python manage.py migrate app-name

Qué pasó:

  • No se realizan cambios en la base de datos.

  • Pero cuando reviso el esquema db, sigue siendo el anterior

Razón:

  • Cuando ejecuto python manage.py migrate app-nameDjango comprueba la tabla django_migrations en la base de datos para ver qué migraciones ya se han aplicado y omitirá esas migraciones.

Lo que probé:

Elimine el registro con app=”my-app-name” de esa tabla (delete from django_migrations where app = "app-name"). Limpiar mi carpeta de migración y ejecutar python manage.py makemigration my-app-nameluego python manage.py migrate my-app-name. Esto fue sugerido por la respuesta más votada. Pero eso tampoco funciona.

¿Por qué?

Debido a que había una tabla existente, y lo que estoy creando fue una “migración inicial”, Django decide que la migración inicial ya se aplicó (porque ve que la tabla ya existe). El problema es que la tabla existente tiene un esquema diferente.

Solución 1:

Descarte la tabla existente (con el esquema anterior), realice las migraciones iniciales y vuelva a aplicarla. Esto funcionará (funcionó para mí) ya que tenemos una “migración inicial” y no había una tabla con el mismo nombre en nuestra base de datos. (Consejo: usé python manage.py migrate my-app-name zero para soltar rápidamente las tablas en la base de datos)

¿Problema? Es posible que desee mantener los datos en la tabla existente. No desea dejarlos caer y perder todos los datos.

Solución 2:

  1. Elimine todas las migraciones en su aplicación y en django_migrations todos los campos con django_migrations.app = your-app-name Cómo hacer esto depende de qué base de datos esté usando Ejemplo para MySQL: delete from django_migrations where app = "your-app-name";

  2. Cree una migración inicial con el mismo esquema que la tabla existente, con estos pasos:

    • Modifique su models.py para que coincida con la tabla actual en su base de datos

    • Eliminar todos los archivos en “migraciones”

    • Correr python manage.py makemigrations your-app-name

    • Si ya tiene una base de datos existente, ejecute python manage.py migrate --fake-initial y luego siga el paso a continuación.

  3. Modifique su models.py para que coincida con el nuevo esquema (es decir, el esquema que necesita ahora)

  4. Realice una nueva migración ejecutando python manage.py makemigrations your-app-name

  5. Correr python manage.py migrate your-app-name

Esto funciona para mí. Y logré mantener los datos existentes.

Más pensamientos:

La razón por la que pasé por todos esos problemas fue porque eliminé los archivos en some-app/migrations/ (los archivos de migraciones). Y por lo tanto, esos archivos de migración y mi base de datos no son consistentes entre sí. Así que intentaría no modificar esos archivos de migración a menos que realmente sepa lo que estoy haciendo.

Parece que su migración inicial fue falsificada porque la tabla ya existía (probablemente con un esquema obsoleto):

https://docs.djangoproject.com/en/1.7/topics/migrations/#agregar-migraciones-a-las-aplicaciones

“Esto hará una nueva migración inicial para su aplicación. Ahora, cuando ejecute la migración, Django detectará que tienes una migración inicial y que las tablas que quiere crear ya existen, y marcará la migración como ya aplicada.”

De lo contrario, obtendría un error de tabla sin tal 🙂

[edit] ¿Limpiaste la tabla de migraciones aplicadas? Esa también es una causa común de migraciones no aplicadas.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *