[PYTHON] Notes d'apprentissage pour la fonction migrations dans le framework Django (2)

Dans la continuité de Dernière fois, je voudrais étudier la fonction de migrations du framework Django.

Dernier synopsis

--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

Aperçu de cette époque

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.

commandes liées aux migrations

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

Notes d'apprentissage pour la fonction migrations dans le framework Django (2)
Notes d'apprentissage pour la fonction migrations dans le framework Django (3)
Notes d'apprentissage pour la fonction migrations dans le framework Django (1)
Notes diverses sur le framework Django REST
List, méthode pour les ressources imbriquées dans le framework Django REST
Comment écrire une validation personnalisée dans Django REST Framework
Résumé des points d'achoppement à Django pour la première fois
Notes de lancement pour les applications Django existantes
Historique d'apprentissage pour participer au développement d'applications d'équipe avec Python ~ Tutoriel Django 5 ~
Historique d'apprentissage pour participer au développement d'applications d'équipe avec Python ~ Tutoriel Django 4 ~
Instruction Loop For inversée dans un fichier HTML sur Django
Historique d'apprentissage pour participer au développement d'applications d'équipe avec Python ~ Tutoriel Django 1, 2, 3 ~
Changer la langue affichée dans Django 1.9
Historique d'apprentissage pour participer au développement d'applications d'équipe avec Python ~ Tutoriel Django 6 ~
Historique d'apprentissage pour participer au développement d'applications d'équipe en Python ~ Tutoriel Django 7 ~
Démarrez Django pour la première fois
Résumé des pages utiles pour étudier le framework d'apprentissage profond Chainer
Récupérer la chaîne de requête (chaîne de requête) avec Django
Obtenez l'adresse IP du client avec Django
Suppression logique dans Django, DRF (Django REST Framework)
Comprendre la commodité de Django Rest Framework
Django ~ Affichons-le sur le navigateur ~
Note de nfc.ContactlessFrontend () de nfcpy de python
Notes d'apprentissage depuis le début de Python 1
Remarques sur la création de fichiers statiques avec Django
Changer la liste dans l'instruction for
Paramètre d'attribut de même site du cookie dans Django
Obtenir les paramètres de requête pour les requêtes GET avec Django
MongoDB avec Python pour la première fois
Remarques sur l'utilisation de python (pydev) avec eclipse
Notes d'apprentissage depuis le début de Python 2
Essayez d'accéder à l'API Spotify dans Django.
[Renforcer l'apprentissage] Rechercher le meilleur itinéraire
Tout refaire pour l'écran de connexion Django
Mémo Django
J'ai essayé de prédire l'évolution de la quantité de neige pendant 2 ans par apprentissage automatique
Ingénierie des fonctionnalités pour l'apprentissage automatique à partir du 4e Google Colaboratory - Fonctionnalités interactives
Mémo Django
Comment installer le framework d'apprentissage en profondeur Tensorflow 1.0 dans l'environnement Windows Anaconda
La fonction _authenticate_with_backend était obsolète dans django auth.autenticate
L'histoire selon laquelle le coût d'apprentissage de Python est faible
Conseils pour accéder à l'API ATND avec Python
Notes pour la mise en œuvre d'un co-filtrage simple en Python
Spécifiez l'URL de la vue dans le modèle Django
L'histoire de l'affichage des fichiers multimédias dans Django
Implémenter la fonctionnalité de connexion JWT dans le framework Django REST
[Implémentation pour l'apprentissage] Implémentation de l'échantillonnage stratifié en Python (1)
[Django] css dans le projet ne peut pas être lu
Faites une recherche ambiguë pour mysql dans Django
Notes de connaissances nécessaires pour comprendre le framework Python
Implémentation de la fonction d'authentification dans Django REST Framework à l'aide de djoser
[Pour les débutants] Introduction à la vectorisation dans l'apprentissage automatique
J'ai installé le framework Deep Learning Chainer
Reproduisons l'outil d'enseignement arithmétique "Jamaica" ❗️ vol.02 "Notes pour créer des fonctions en Python"
Reproduisons l'outil d'enseignement de l'arithmétique "Jamaica" ❗️ vol.01 "Notes pour l'affichage des images en Python"