Ist es möglich, Django-Modelle aus der Datenbank zu generieren?

90

Ich habe zu Hause mit Django und dem Django ORM rumgespielt, und ich muss sagen, ich denke, es ist eines der besten in Bezug auf Benutzerfreundlichkeit.

Ich habe mich jedoch gefragt, ob es möglich ist, es in "umgekehrter Richtung" zu verwenden.

Grundsätzlich möchte ich Django-Modelle aus einem vorhandenen Datenbankschema generieren (aus einem Projekt, das kein Django verwendet und ziemlich alt ist).

Ist das möglich?

Update: Die betreffende Datenbank ist Oracle

TM.
quelle

Antworten:

105

Ja, verwenden Sie den inspectdbBefehl:

inspectdb

Untersucht die Datenbanktabellen in der Datenbank, auf die durch die Einstellung DATABASE_NAME verwiesen wird, und gibt ein Django-Modellmodul (eine Datei models.py) an die Standardausgabe aus.

Verwenden Sie diese Option, wenn Sie über eine Legacy-Datenbank verfügen, mit der Sie Django verwenden möchten. Das Skript überprüft die Datenbank und erstellt für jede Tabelle ein Modell.

Wie zu erwarten, haben die erstellten Modelle für jedes Feld in der Tabelle ein Attribut. Beachten Sie, dass inspectdb in seiner Feldnamenausgabe einige Sonderfälle enthält:

[...]

ars
quelle
1
Wenn Sie diese Informationen lesen, heißt es, dass sie für MySQL, SQLite und Postgresql unterstützt werden. Leider ist die Datenbank, die ich zu verwenden versuche, Oracle :(
TM.
Ich glaube nicht, dass Django im Moment eine gute Unterstützung für Oracle hat, sowohl vorwärts als auch rückwärts: /
AlbertoPL
3
Django hat fast alle Funktionen, die man sich vorstellen kann. Es überrascht mich auch nach Jahren des Gebrauchs.
Divick
Ich bin nicht sicher, aber ... vielleicht sollten Sie darauf hinweisen, dass der Link auf die devVersion verweist (mit mehr Betonung? Vielleicht nicht ..)
Federico Gallo
ist es möglich, den gleichen Befehl zu verwenden, wenn eine neue Tabelle eingefügt wird
selvakumar
33

(Django 1.7.1) Durch einfaches Ausführen python manage.py inspectdbwerden Klassen für alle Tabellen in der Datenbank erstellt und auf der Konsole angezeigt.

 $ python manage.py inspectdb

Speichern Sie dies als Datei, indem Sie die Standard-Unix-Ausgabeumleitung verwenden:

 $ python manage.py inspectdb > models.py

(Dies funktioniert bei mir mit MySQL und Django 1.9)

KKlalala
quelle
10

Ich habe eine wiederverwendbare App erstellt, die auf dem Befehlsdienstprogramm inspectdb von django, Django Inspectdb Refactor , basiert .

Dadurch werden Modelle aus einer vorhandenen Datenbank in verschiedene Dateien im Modellordner aufgeteilt. Dies hilft bei der Verwaltung von Modellen, wenn deren Anzahl groß wird.

Sie können es über pip installieren:

pip install django-inspectdb-refactor

Registrieren Sie dann die App in settings.py als inspectdb_refactor

Danach können Sie es über die Befehlszeile verwenden als:

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

Dadurch wird erfolgreich ein Modellordner mit allen Tabellen als unterschiedliche Modelldateien in Ihrer App erstellt. Beispielsweise:

typische Struktur

Weitere Details finden Sie hier.

not2acoder
quelle
Fügen Sie hier weitere Beschreibungen hinzu
Mathews Sunny
python3 manage.py inspectdb_refactor --database = xmldb --app = django_sb_admin Fehler: Unbekannter Befehl: 'inspectdb_refactor' Geben Sie 'manage.py help' zur Verwendung ein.
Ali Reza
Haben Sie diese App in Ihrer settings.py als inspectdb_refactor registriert ?
not2acoder
Ich bekomme diesen Fehler get_meta() missing 1 required positional argument: 'is_partition'. Verwenden von Django 2.0
LTroya