È 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.