È possibile generare modelli django dal database?


90

Ho scherzato con Django e il Django ORM a casa, e devo dire che sento che è uno dei migliori in circolazione in termini di facilità d'uso.

Tuttavia, mi chiedevo se fosse possibile usarlo al contrario.

Fondamentalmente quello che vorrei fare è generare modelli Django da uno schema di database esistente (da un progetto che non usa django ed è piuttosto vecchio).

È possibile?

Aggiornamento: il database in questione è Oracle

Risposte:


105

Sì, usa il inspectdbcomando:

inspectdb

Esamina le tabelle del database nel database a cui fa riferimento l'impostazione DATABASE_NAME e genera un modulo del modello Django (un file models.py) sullo standard output.

Usalo se hai un database legacy con il quale desideri usare Django. Lo script ispezionerà il database e creerà un modello per ogni tabella al suo interno.

Come ci si potrebbe aspettare, i modelli creati avranno un attributo per ogni campo nella tabella. Nota che inspectdb ha alcuni casi speciali nell'output del nome di campo:

[...]


1
Rileggendo queste informazioni, si dice che è supportato per mysql, sqlite e postgresql. Purtroppo il database che sto cercando di utilizzare è Oracle :(
TM.

oof, non credo che Django abbia un buon supporto per Oracle al momento, sia in avanti che all'indietro: /
AlbertoPL

3
Django ha quasi tutte le caratteristiche a cui si potrebbe pensare. Mi stupisce ancora anche dopo anni di utilizzo.
Divick

Non ne sono sicuro ma ... forse dovresti precisare che il link si riferisce alla devversione (con più enfasi ?? forse no ..)
Federico Gallo

è possibile utilizzare lo stesso comando quando viene inserita una nuova tabella
selvakumar

33

(Django 1.7.1) La semplice esecuzione python manage.py inspectdbcreerà classi per tutte le tabelle nel database e verranno visualizzate sulla console.

 $ python manage.py inspectdb

Salvalo come file utilizzando il reindirizzamento dell'output Unix standard:

 $ python manage.py inspectdb > models.py

(Questo funziona per me con mysql e django 1.9)


10

Ho creato un'app riutilizzabile basata sull'utilità di comando inspectdb di django, Django Inspectdb Refactor .

Questo suddivide i modelli in diversi file all'interno della cartella dei modelli da un database esistente. Questo aiuta a gestire i modelli quando diventano numerosi.

Puoi installarlo tramite pip:

pip install django-inspectdb-refactor

Quindi registra l'app in settings.py come inspectdb_refactor

Dopodiché puoi usarlo dalla riga di comando come:

python manage.py inspectdb_refactor --database=your_dbname_defined_in_settings --app=your_app_label

Questo creerà correttamente la cartella dei modelli con tutte le tabelle come file di modello diversi all'interno della tua app. Per esempio:

struttura tipica

Maggiori dettagli possono essere trovati qui.


Aggiungi qualche altra descrizione qui
Mathews Sunny

python3 manage.py inspectdb_refactor --database = xmldb --app = django_sb_admin Errore: comando sconosciuto: "inspectdb_refactor" Digita "manage.py help" per l'utilizzo.
ali reza

hai registrato questa app nel tuo settings.py come inspectdb_refactor ?
not2acoder

Ricevo questo errore get_meta() missing 1 required positional argument: 'is_partition'. Utilizzo di django 2.0
LTroya
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.