gwift-book/source/part-3-django-concepts/migrations.adoc

2.2 KiB
Raw Blame History

Migrations

Dans cette section, nous allons voir comment les migrations fonctionnent. Dans une première version, elles peuvent sembler un peu magiques, dans la mesure où elles appliquent des modifications au niveau du schéma de données en se basant uniquement sur des modifications effectuées sur le modèle.

Pour repartir de notre exemple ci-dessus, nous avions un modèle reprenant quelques classes, et saupoudrées de propriétés. Pour schématiser, chaque classe correspond à une table dans la base de données, tandis que que chaque propriété correspond à un champ de cette table.

Une migration consiste donc à appliquer un ensemble de modifications, qui exercent un ensemble de transformations, pour que le schéma de base de données corresponde au modèle de lapplication.

Les migrations (comprendre les "migrations du schéma de base de données") sont intimement liées à la représentation dun contexte fonctionnel. Lajout dune nouvelle information, dun nouveau champ ou dune nouvelle fonction peut saccompagner de tables de données à mettre à jour ou de champs à étendre.

Toujours dans une optique de centralisation, les migrations sont directement embarquées au niveau du code. Le développeur soccupe de créer les migrations en fonction des actions à entreprendre; ces migrations peuvent être retravaillées, squashées, …​ et feront partie intégrante du processus de mise à jour de lapplication.

A noter que les migrations nappliqueront de modifications que si le schéma est impacté. Ajouter une propriété related_name sur une ForeignKey nengendrera aucune nouvelle action de migration, puisque ce type daction ne sapplique que sur lORM, et pas directement sur la base de données: au niveau des tables, rien ne change. Seul le code et le modèle sont impactés.

En gros, soit on supprime toutes les migrations (en conservant le fichier __init__.py), soit on réinitialise proprement les migrations avec un --fake-initial (sous réserve que toutes les personnes qui utilisent déjà le projet s'y conforment... Ce qui n'est pas gagné.