Modellazione del database Django

2

Sto iniziando un progetto con Django, in precedenza ho utilizzato Yii e Rails e hanno strumenti che prenderanno una struttura DB e costruiranno modelli per te basati sulla struttura del DB. Da quello che ho letto Django sembra essere il contrario, in quanto costruisce il DB da ciò che hai inserito nei tuoi modelli.

While Django is best suited for developing new applications, it’s quite possible to integrate it into legacy databases. Django includes a couple of utilities to automate as much of this process as possible.

Come qualcuno nuovo di Django, quanto è comune / accettabile costruire il tuo DB e poi usare inspectdb per generare i modelli? Inoltre, la struttura del DB cambierà inevitabilmente durante lo sviluppo, quali sono le migliori pratiche per gestire questo problema e assicurarti che i livelli rimangano sincronizzati.

In che modo la sincronizzazione di DB e Django influisce anche sui dati esistenti nel DB

    
posta Jonnny 28.11.2016 - 18:39
fonte

1 risposta

1

Non sono un esperto di Django (ho fatto uno o due progetti di dimensioni moderate e, anni fa, ho fatto alcuni Rails), ma per quanto ne so:

As someone new to Django how common/acceptable is it to build your DB first and then use inspectdb to generate the models?

Va bene. Il progetto Django fornisce e documenti inspectdb, quindi non c'è niente di sbagliato nell'usarlo.

Also inevitably your DB structure will change as you go through development, what are the best practices to deal with this and making sure the layers stay in sync.

Le versioni correnti di Django forniscono migrazioni, proprio come fa Rails. Vedi i documenti ufficiali o vari tutorial, come questo . In sostanza:

  • Esegui ./manage.py makemigrations per creare le tue migrazioni. Django creerà automaticamente il codice Python per configurare un database in modo che corrisponda ai tuoi modelli Django.
  • Esegui ./manage.py migrate per applicare le tue migrazioni.
  • Ogni volta che hai cambiato i tuoi modelli, esegui ./manage.py makemigrations . Django ispezionerà automaticamente i tuoi modelli Django, vedrà cosa è cambiato dall'ultima volta che è stato eseguito e genererà il codice Python per sincronizzare il database con le modifiche del tuo modello.

Tieni presente che, se hai eseguito il inspectdb , i modelli generati hanno managed=False , quindi sono esclusi dalla logica di migrazione di Django. Mi piacciono molto le migrazioni, quindi dopo essermi assicurato che i miei modelli creati da inspectdb fossero buoni, avrei impostato managed=True e lasciato che Django gestisse i modelli da lì in poi. (Non ho esperienza con questo per sapere come funziona.)

How does syncing the DB and Django affect data existing in the DB too

Le migrazioni modificano il database sul posto (come se si stessero emettendo manualmente comandi ALTER TABLE o qualsiasi altra cosa), quindi i dati vengono lasciati soli laddove possibile. Modifiche come l'aggiunta di una colonna potrebbero richiedere nuovi dati di default (Django può avvisarti se necessario); modifiche come la caduta di una colonna ovviamente perderanno dati.

    
risposta data 01.12.2016 - 19:19
fonte

Leggi altre domande sui tag