Dans la continuité de Dernière fois, je voudrais étudier la fonction de migrations du framework Django.
--Utilisez le framework Djange pour créer un projet, créer une application de test et terminer la configuration de la base de données --Initialiser et créer un fichier modèle pour l'application et le refléter dans la base de données --Ajouter un nouveau champ au modèle, le refléter dans la base de données --Restaurer la base de données à son état initialisé afin d'annuler les changements dans les étapes ci-dessus
Environnement de développement |
---|
Mac OS:Sierra |
python2.7.10 |
django1.11.2 |
mysql5.7.18 |
La dernière fois, j'ai présenté le flux de travail de base des migrations, mais cette fois, j'étudierai les commandes de base liées aux migrations et comment résoudre les problèmes que vous rencontrez souvent lors de l'utilisation réelle.
Les Documents officiels introduit quatre commandes liées aux migrations. Utilisons l'application de démonstration et utilisons les commandes.
showmigrations Entrez la commande suivante sur la ligne de commande:
python manage.py showmigrations
Dans la sortie:
admin
[X] 0001_initial
[X] 0002_logentry_remove_auto_add
auth
[X] 0001_initial
[X] 0002_alter_permission_name_max_length
[X] 0003_alter_user_email_max_length
[X] 0004_alter_user_username_opts
[X] 0005_alter_user_last_login_null
[X] 0006_require_contenttypes_0002
[X] 0007_alter_validators_add_error_messages
[X] 0008_alter_user_username_max_length
contenttypes
[X] 0001_initial
[X] 0002_remove_content_type_name
polls
[X] 0001_initial
[ ] 0002_article_image_url
sessions
[X] 0001_initial
L'état actuel des migrations pour chaque application du projet est affiché dans une liste de contrôle. Toutes les migrations d'applications par défaut telles que l'administrateur, l'authentification, les types de contenu et les sessions ont été reflétées. Dans les sondages, qui est une application de démonstration, le fichier de migration 0001_initial.py reflété dans l'initialisation est vérifié. Le fichier de migration 0002_article_image_url.py, qui a été annulé par la récupération, a été décoché. Vous pouvez également spécifier l'application avec des options dans la commande.
python manage.py showmigrations polls
Cela restreindra la sortie à une application spécifique.
polls
[X] 0001_initial
[ ] 0002_article_image_url
makemigrations Créez un fichier de migration en fonction des modifications du modèle, voir Dernière fois pour un exemple concret.
migrate Utilisez le fichier de migrations créé pour refléter le modèle dans la base de données. Ajoutons à nouveau les modifications annulées.
python manage.py migrate polls
production
Operations to perform:
Apply all migrations: polls
Running migrations:
Applying polls.0002_article_image_url... OK
Vérifiez l'état des migrations dans l'application de démonstration:
python manage.py showmigrations polls
production:
polls
[X] 0001_initial
[X] 0002_article_image_url
Vous pouvez voir que le fichier de migrations 0002_article_image_url.py a été reflété.
sqlmigrate
Affiche l'instruction sql qui exécute réellement le contenu du fichier de migration. Si vous souhaitez l'utiliser, vous devez mettre le nom de l'application cible et le nom du fichier de migrations dans les options. Spécifions le fichier de migrations 0002_article_image_url et exécutons-le.
python manage.py sqlmigrate polls 0002_article_image_url
production
BEGIN;
--
-- Add field image_url to article
--
ALTER TABLE `polls_article` ADD COLUMN `image_url` varchar(200) DEFAULT toBeImplement NOT NULL;
ALTER TABLE `polls_article` ALTER COLUMN `image_url` DROP DEFAULT;
COMMIT;
Le comportement des migrations suspectes a été immédiatement résolu. De plus, avec l'option --backwards, vous pouvez également voir l'instruction sql pour annuler les migrations.
python manage.py sqlmigrate --backwards polls 0002_article_image_url
production
BEGIN;
--
-- Add field image_url to article
--
ALTER TABLE `polls_article` DROP COLUMN `image_url`;
COMMIT;
Le commentaire décrit le fichier de migrations, mais l'instruction sql annule correctement les modifications (supprime la colonne image_url).
Recommended Posts