Django migrer --faux et --faux-initiale expliqué
J'ai été un utilisateur de Django pour environ 2 ans maintenant et il y a une fonctionnalité que j'ai toujours eu peur de l'utilisation : de truquer les migrations.
J'ai regardé un peu partout, et la plupart des informations que je peux obtenir de l'est de la la documentation, où il est dit que:
--faux
Indique à Django pour marquer les migrations comme ayant été appliquée ou
non, mais sans exécuter le SQL pour modifier votre
schéma de base de données.C'est destiné aux utilisateurs avancés de manipuler l'actuel
la migration de l'état directement si elles sont appliquant manuellement les modifications;
averti que l'utilisation de --faux court le risque de mettre de la migration de l'état
tableau dans un état où la récupération manuelle sera nécessaire pour faire
les migrations s'exécuter correctement.
--faux-initiale
Permet de Django pour sauter d'une application initiale de la migration si la base de données
les tables avec les noms de tous les modèles créés par toutes les CreateModel
les opérations de migration existent déjà. Cette option est destinée
pour une utilisation lors de la première exécution de migrations à l'encontre d'une base de données qui
préexisté à l'utilisation des migrations. Cette option n'est pas, cependant, de vérifier
pour la mise en correspondance schéma de base de données au-delà de correspondance des noms de table et est donc
seulement sûr à utiliser si vous êtes certain que votre schéma existant
correspond à ce qui est enregistré dans votre migration initiale.
J'ai l'idée générale et pourquoi vouloir utiliser cette fonctionnalité. Mais, je ne comprends pas la partie où il dit que c'est destiné aux utilisateurs avancés seulement.
Quelqu'un peut m'expliquer ce qui se passe derrière la scène et pourquoi récupération manuelle serait nécessaire.
NOTE
Je ne suis pas à la recherche de l'exactitude des premières requêtes SQL qui fonctionne quand truqué une migration. Je suis seulement à la recherche d'une idée générale de ce qui se passe derrière la scène et peut-être un exemple de pourquoi truquer une migration
le résultat serait dans un état où makemigrations
ne pas fonctionner correctement.
OriginalL'auteur scharette | 2017-10-16
Vous devez vous connecter pour publier un commentaire.
Imaginez que vous avez commencé à modifier une application la semaine dernière, peut-être parce que vous avez trouvé un bug ou que vous avez prolongé par un champ ou une colonne. Aujourd'hui, vous avez reçu une mise à jour et que vous avez un problème, parce qu'il y est une migration qui ajoute un champ qui est encore dans votre base de données et vous ne pouvez appliquer qu'à d'autres parties de la migration. Vous regardez son SQL contenu en cours d'exécution
comparer le contenu avec le changement fait la semaine dernière et supprimer ou commenter une commande qui est toujours en vigueur, et ne peut pas être répété. Exécuter toutes les autres SQL manuellement. Marque que la migration comme il l'aurait appliqué automatiquement:
Si vous cassez quelque chose, personne ne peut probablement vous aider, vous et ni vous, ni d'un système de migration connaît l'état actuel de la base de données. Par conséquent, de sauvegarde, d'écrire des notes, utiliser un bac à sable et de travailler de manière précise.
MODIFIER Le tableau de migration
django_migrations
est une simple liste d'appliquer les migrations dans toutes les applications. Les lignes de cette table doit être toujours synchronisés avec la structure de base de données. Les Migrations peuvent être appliquées par les normal de migrer. (ou non appliquées par l'inverse de la migration d'un ancien état, généralement avec une certaine perte de données bien sûr) Un faux migration s'applique la modification du django_migrations table.Migration (fichier) est une description de la modification incrémentielle et d'information pour être possible d'évaluer la différence dans les modèles depuis la dernière migration, lors de l'exécution de
makemigrations
. Il est assez également dans le cas où certaines tables ont été géré par les nations unies à l'origine et qu'ils pourraient devenu géré plus tard.MODIFIER Un exemple comment
sqlmigrate
et--fake
pourrait être utilisé pour réparer la base de données par les migrations (pour recréer une table supprimée).Oui, utile. Expliqué.
OriginalL'auteur hynekcer