lunes, 14 de diciembre de 2020

Borrar los archivos de migraciones en Django

Script para eliminar todos los archivos de migraciones generados en un proyecto Django.


En la mayoría de los casos no es recomendable borrar los archivos de migraciones generados por Django al ejecutar el comando python manage.py makemigrations, ya que esto guarda un historial completo de los cambios realizados en la base de datos, y así Django, al ejecutar el comando python manage.py migrate determina que migraciones se van aplicar en la base de datos en cuestión. Puedes leer más acerca de las migraciones en Django en el siguiente enlace. Pero, en algunos casos, especialmente para proyectos nuevos que aún no han sido implementados en producción, nos resulta útil borrar estas migraciones. 

Por ejemplo:

Cuando estamos creando un nuevo proyecto Django, es frecuente que realicemos cambios en nuestros modelos, cambiando parámetros de nuestros campos, ya sea corrigiendo errores ortográficos en los textos de parámetro help_text o verbose_name, etc., los cuales resultarán en un nuevo archivo de migración creado por Django, aunque estos cambios no sean tan relevantes. Entonces al momento de implementar nuestro proyecto en producción, tendríamos un sin número de migraciones prácticamente innecesarias, ya que bien podrían haberse incluido en las migraciones iniciales. 

Podemos manualmente eliminar cada una de estas migraciones entrando a cada aplicación y eliminar los archivos uno a uno, pero por comodidad siempre preferimos automatizar todo.


"""
Elimina los archivos dentro las carpetas 'migrations'
"""

import os

opt = str(input("Si continua se borrarán todas las migraciones de todas las "
"aplicaciones que se encuentran en el directorio base. Especificamente dentro "
"de los subdirectorios 'migrations'. ¿Desea continuar? yes/no: "))

if opt.lower() != "yes":
exit(0)

def removedir(path):
for name in os.listdir(path):
p = os.path.join(path, name)
if os.path.isdir(p):
removedir(p)
else:
try:
os.remove(p)
except (WindowsError) as e:
print(e)
else:
print("CORRECTO -- ", p)

path1 = os.curdir

# Remover todos los archivos dentro de los
# directorios 'migrations' y __pycache__
for dirname in ["migrations", "__pycache__"]:
for name in os.listdir(path1):
p = os.path.join(path1, name, dirname)
if os.path.isdir(p):
removedir(p)
try:
# Volvemos a crear el __init__.py borrado.
f = open(os.path.join(p, "__init__.py"), "w")
f.close()
except (BaseException) as e:
print(e)


2 comentarios:

  1. Hi Thank you for your article its an outstanding I've ever seen ,the information mentioned in this blog is useful for new bloggers on online platform to get increase their followers , we also posted some useful information for those people who were interested in gaming so if you want to read our article then kindly visit to our websitegoogle play point

    ResponderBorrar
  2. This article content helpfull information about salesforce. You can also do visit onreaction time test

    ResponderBorrar