2010-04-30 24 views
16

Ho alcuni modelli con cui sto lavorando in una nuova installazione di Django. È possibile modificare i campi senza perdere i dati dell'app?Django: cambia i modelli senza cancellare tutti i dati?

Ho provato a cambiare campo e ad eseguire python manage.py syncdb. Non è stato prodotto alcun output da questo comando.

Renavigating to admin pages per modificare i modelli modificati ha causato TemplateSyntaxErrors come Django ha cercato di visualizzare campi che non esistevano nel db.

Sto usando SQLite.

Sono in grado di eliminare il file db, quindi rieseguire python manage.py syncdb, ma è una specie di dolore. C'è un modo migliore per farlo?

risposta

5

Dovrai aggiornare manualmente lo schema/layout del database, se stai solo aggiungendo/rimuovendo colonne.

Se stai tentando di rinominare una colonna, dovrai trovare un altro modo.

È possibile utilizzare il comando python manage.py sql [app name] (http://docs.djangoproject.com/en/dev/ref/django-admin/#sql-appname-appname) per vedere ciò che il nuovo SQL dovrebbe essere simile, per vedere che cosa colonne, di che tipo/specifica Django avrebbe si aggiunge, e quindi eseguire manualmente corrispondente ALTER TABLE comandi.

Ci sono alcune app/progetti che consentono una gestione più semplice del modello/del DB, ma Django non supporta questo fuori dalla scatola, di proposito/in base alla progettazione.

+0

Il libro di django ha una buona sezione su questo. [link] http://www.djangobook.com/en/2.0/chapter10.html#Making%20Changes%20to%20a%20Database%20Schema [/ link] –

20

Django non modifica mai una colonna di database esistente. Syncdb creerà le tabelle, ma non fa "migrazioni" come trovato in Rails, per esempio. Se hai bisogno di qualcosa di simile, controlla Django South.

Vedi the docs for syndb:

syncdb non altera le tabelle esistenti

syncdb creerà solo le tabelle per i modelli che non sono ancora stati installati. Non emetterà mai istruzioni ALTER TABLE per far corrispondere le modifiche apportate a una classe del modello dopo l'installazione. Le modifiche alle classi di modelli e agli schemi di database spesso implicano qualche forma di ambiguità e, in quei casi, Django dovrebbe indovinare le modifiche corrette da apportare. C'è il rischio che i dati critici vengano persi nel processo.

Se sono state apportate modifiche a un modello e si desidera modificare le tabelle del database in modo che corrispondano, utilizzare il comando sql per visualizzare la nuova struttura SQL e confrontarla con lo schema della tabella esistente per elaborare le modifiche.

È necessario modificare manualmente i nomi delle colonne nel DB tramite gli strumenti di amministrazione forniti da sqlite. Ho fatto questo con MySQL, per esempio, e dato che MySQL ti permette di cambiare i nomi delle colonne senza influenzare i tuoi dati, non c'è problema.

8

Ovviamente c'è.
Check out South

+0

Questo non è aggiornato. – User

Problemi correlati