Ripristina migrazioni in Django
Quando lavoriamo con i database, spesso dobbiamo reimpostare un database perché lo riempiamo di dati inutili. A volte, finiamo persino per configurare un database basato su uno schema di database soggetto a errori. A volte, finiamo anche per cambiare la logica di business, che regola l’intero design del database. Queste situazioni sono piuttosto comuni nel campo dell’informatica e sono stati costruiti alcuni buoni strumenti e comandi per gestirle.
In Django, se finiamo in una situazione del genere, dobbiamo ripristinare le migrazioni e il database. Quando si ripristinano le migrazioni, abbiamo alcune opzioni nella lista.
- Reimposta l’intero database
- Ripristina un’app Django su alcune vecchie migrazioni
Reimposta l’intero database in Django
Quando dobbiamo ripristinare l’intero database in Django, ci sono alcune opzioni nella lista.
- Se stiamo utilizzando il database SQLite predefinito di Django, possiamo eliminare il file di database
db.sqlite3
e quindi eliminare tutte le cartellemigrations
all’interno di tutte le app. Dopo aver cancellato le cartellemigrations
, possiamo rifare le migrazioni e migrarle utilizzando due comandi; vale a dire,python manage.py makemigrations
epython manage.py migrate
. - Se stiamo utilizzando un altro database relazionale come PostgreSQL o MySQL, possiamo eliminare tutte le tabelle utilizzando uno strumento di gestione del database come
pgAdmin
,DBeaver
, ecc. o manualmente utilizzando la riga di comando. Oppure, possiamo creare un database completamente nuovo e poi collegarlo al nostro Django Project. Si noti che, in entrambi i casi, è necessario prima eliminare tutte le cartellemigrations
e poi rifare le migrazioni e, infine, migrarle. - Un’altra opzione è usare il comando
manage.py
di Django per cancellare l’intero database per noi. Il comando èpython manage.py flush
. Anche in questo caso, dopo aver utilizzato questo comando, dobbiamo eliminare tutte le cartellemigrations
e quindi effettuare le nuove migrazioni.
Ripristina un’app Django alle sue vecchie migrazioni
Se non dobbiamo ripristinare l’intero database ma ripristinare le migrazioni per un’app Django specifica, abbiamo due opzioni. Innanzitutto, possiamo invertire le migrazioni correnti di un’app Django in alcune vecchie migrazioni. In secondo luogo, possiamo ripristinare tutte le migrazioni per l’app Django.
Se dobbiamo migrare indietro da una migrazione più recente, diciamo 0014, a una migrazione precedente, diciamo 0008, possiamo usare i seguenti comandi.
python manage.py migrate AppName 0008
--- OR ---
python manage.py migrate AppName 0008_migration_name
E, se dobbiamo ripristinare tutte le migrazioni per un’app Django, possiamo usare il seguente comando.
python manage.py migrate AppName zero
Nota che a volte le migrazioni possono essere irreversibili. Generalmente, questa condizione si verifica quando sono state apportate alcune modifiche significative ai modelli Django. Quando proveremo a tornare a una tale migrazione, Django genererà un IrreversibleError
.