Domanda

Attualmente sto esaminando il framework Python Django per future app Web basate su DB, nonché per un port di alcune app attualmente scritte in PHP.Uno dei problemi più difficili durante i miei ultimi anni è stato tenere traccia delle modifiche allo schema del database e distribuire tali modifiche ai sistemi produttivi.Non ho osato chiedere di poter annullare anche loro, ma ovviamente sarebbe un'ottima funzionalità per testare e eseguire il debug.Da altre domande qui (come Questo O Questo), vedo che non sono solo e che questo non è un problema banale.Inoltre, ho trovato molte ispirazioni nelle risposte lì.

Ora, poiché Django sembra essere molto potente, dispone di strumenti per aiutare con quanto sopra?Forse è anche nei loro documenti e mi è sfuggito?

È stato utile?

Soluzione

Esistono almeno due utilità di terze parti per gestire le migrazioni dello schema DB, Sud E Evoluzione di Django.Non ho provato nessuno dei due, ma ho sentito alcune cose positive su South, anche se Evolution è in circolazione da un po' più tempo.

Inoltre, guarda SchemaEvolution sul wiki di Django.È solo una pagina wiki sulla migrazione del db.

Altri suggerimenti

L'ultima volta che ho controllato (versione 0.97), syncdb sarà in grado di aggiungere tabelle per sincronizzare il tuo schema DB con il tuo file models.py, ma non può:

  • Rinominare o aggiungere una colonna su un DB popolato.Devi farlo a mano.
  • Rifattorizza il tuo modello (come dividere una tabella in due) e ripopola il tuo DB di conseguenza.

Potrebbe essere possibile però scrivere uno script Django per effettuare la migrazione giocando con i due diversi gestori, ma ciò potrebbe richiedere molto tempo se il tuo DB è grande.

C'è stata una sessione del panel sulle modifiche dello schema DB al recente DjangoCon;c'è un video della sessione (grazie a Google), che dovrebbe fornire alcune informazioni utili su alcune di queste utility.

E ora c'è anche migrazioni.Da annuncio:

django-evolution tenta di affrontare questo problema in modo intelligente, rilevando le modifiche ai modelli che non si riflettono ancora nello schema del database e capendo cosa è necessario fare per riportare i due in sincronia. Al contrario, le migrazioni adottano un approccio stupido:richiede di dichiarare esplicitamente le modifiche in una sequenza di migrazioni, che verranno applicate a loro volta per portare un database allo stato più recente che riflette i modelli sottostanti.

Ciò significa lavoro extra per gli sviluppatori che creano migrazioni, ma rende anche l'intero processo completamente trasparente: per i nostri progetti abbiamo deciso di utilizzare il sistema più semplice che potesse funzionare.

(Il mio audace)

Ne ho sentito parlare molto bene Ramo di evoluzione dello schema Django e quelle erano opinioni di utenti reali.Per lo più funziona fuori dagli schemi e fa quello che dovrebbe fare.

Dovresti cercare Emigrazioni, funziona in modo leggermente diverso da django-eveoltions.Ti mostra tutto quello che sta facendo e per le cose complicate ti chiede il tuo intervento.Dovrebbe essere fantastico.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top