17 agosto 2015

Django e le migrazioni


Nelle precedenti versioni, Django offriva un sistema di aggiornamento dei modelli e di conseguente sincronizzazione con il relativo schema nel database piuttosto antiquato, permettendo solo di aggiungere nuovi modelli al database, senza modifiche in itinere: non era possibile modificare o rimuovere i modelli esistenti attraverso il comando

syncdb

Aggiornare un'applicazione in modo che rifletta le modifiche apportate al modello diventava qualcosa di laborioso (esistono tuttavia dei tool come South, oppure Django Evolution.

Dalla versione 1.7, sono state introdotte le migrazioni, ovvero l'automatismo attraverso il quale è possibile applicare i cambiamenti del modello (aggiunta di campi, ...) allo schema del database.

Sostanzialmente, si tratta di una procedura molto semplice che possiamo schematizzare nel modo seguente:
  • applicare i cambiamenti al modello;
  • eseguire il comando

    python manage.py makemigrations
  • eseguire il comando

    python manage.py migrate 

Il primo comando, makemigrations, è responsabile della creazione di una nuova migrazione basata sui cambiamenti fatti sul modello; migrate, invece, applica la migrazione, oppure elenca gli eventuali motivi ostativi.
A questi comandi si aggiunge sqlmigrate, che permette di mostrare le istruzioni SQL che verranno eseguite per applicare la migrazione.

Le migrazioni si possono pensare come un sistema di controllo della versione per lo schema del database: makemigrations opera una scansione del modello modificato e un confronto con le versioni precedenti conservate nei files di migrazioni, producendo un impacchettamento dei cambiamenti del modello in un nuovo file di migrazione; migrate, infine, si occupa di applicare i cambiamenti allo schema.

I file di migrazione vengono conservati nella directory
my_app/migrations.

Nessun commento:

Posta un commento