Les migrations permettent de passer d'un schéma de base de données à un autre tout en conservant les données actuelles dans la base de données. Django permet de créer des migrations à l'aide de la commande python manage.py makemigrations
Chaque fois que makemigrations
est exécuté, un nouveau fichier de migration 000n..
est ajouté en fonction des modifications détectées dans models.py
fichier.
Parfois, après avoir apporté de petites modifications à models.py, je veux exécuter des migrations mais je ne veux pas qu'une nouvelle migration soit créée car les migrations précédentes n'ont pas encore été utilisées, ce qui leur permet d'être fusionnées ensemble, principalement parce que l'exécution de chaque migration en production peut prendre beaucoup de temps lorsqu'il y a beaucoup de données dans la base de données, donc la fusion des migrations avant la main peut être préférable.
Existe-t-il un moyen de permettre la fusion d'une nouvelle migration 0n .. avec une migration existante 0 (n-1) ..?
La commande que vous recherchez est squashmigrations . Il fusionnera toutes les migrations non appliquées d'une application donnée dans un seul fichier.
Je veux exécuter makemigrations mais je ne veux pas qu'une nouvelle migration soit créée car les migrations précédentes n'ont pas encore été utilisées
Ce n'est pas un problème, Django exécute les migrations de haut en bas, ce qui signifie que votre dernier fichier de migration attendra que les autres fichiers de migration précédents soient exécutés.
car l'exécution de chaque migration en production peut prendre beaucoup de temps lorsqu'il y a beaucoup de données dans la base de données
Combien de données avez-vous dans la base de données? Si vraiment beaucoup, alors vous devez déjà avoir des réplications et des serveurs db redondants. Dans ce cas, basculez les lectures et écritures sur un, par exemple serveur esclave, exécutez les migrations dans le maître. puis remettez le trafic sur maître, et avant cela, assurez-vous que le décalage entre eux est de 0 et que le nouveau schéma est correctement répliqué entre eux