Czy można generować modele django z bazy danych?

91

Bawiłem się w domu z Django i Django ORM i muszę powiedzieć, że jest jednym z najlepszych pod względem łatwości użycia.

Zastanawiałem się jednak, czy da się go użyć „na odwrót”.

Zasadniczo chciałbym wygenerować modele Django z istniejącego schematu bazy danych (z projektu, który nie używa django i jest dość stary).

czy to możliwe?

Aktualizacja: ta baza danych to Oracle

TM.
źródło

Odpowiedzi:

107

Tak, użyj inspectdbpolecenia:

inspectdb

Przeszukuje tabele bazy danych w bazie danych wskazywanej przez ustawienie DATABASE_NAME i wyprowadza moduł modelu Django (plik models.py) na standardowe wyjście.

Użyj tego, jeśli masz starszą bazę danych, z którą chciałbyś używać Django. Skrypt sprawdzi bazę danych i utworzy model dla każdej znajdującej się w niej tabeli.

Jak można się spodziewać, utworzone modele będą miały atrybut dla każdego pola w tabeli. Zauważ, że inspectdb ma kilka specjalnych przypadków w wynikach nazwy pola:

[…]

ars
źródło
1
Czytając te informacje, stwierdza się, że jest obsługiwany przez mysql, sqlite i postgresql. Niestety baza danych, której próbuję użyć, to Oracle :(
TM.
oof, nie wierzę, że Django ma obecnie dobre wsparcie dla Oracle, zarówno do przodu, jak i do tyłu: /
AlbertoPL
3
Django ma prawie wszystkie funkcje, o których można pomyśleć. Nadal mnie zadziwia nawet po latach użytkowania.
Divick
Nie jestem pewien, ale ... może warto zwrócić uwagę, że link odnosi się do devwersji (z większym podkreśleniem ?? może nie ..)
Federico Gallo
czy możliwe jest użycie tego samego polecenia po wstawieniu nowej tabeli
selvakumar
34

(Django 1.7.1) Po prostu uruchomienie python manage.py inspectdbutworzy klasy dla wszystkich tabel w bazie danych i wyświetli je na konsoli.

 $ python manage.py inspectdb

Zapisz to jako plik, używając standardowego przekierowania wyjścia Unix:

 $ python manage.py inspectdb > models.py

(To działa dla mnie z mysql i django 1.9)

KKlalala
źródło
10

Stworzyłem aplikację wielokrotnego użytku opartą na narzędziu poleceń inspectdb, Django Inspectdb Refactor .

Spowoduje to podzielenie modeli na różne pliki w folderze modeli z istniejącej bazy danych. Pomaga to w zarządzaniu modelami, gdy stają się one duże.

Możesz zainstalować go przez pip:

pip install django-inspectdb-refactor

Następnie zarejestruj aplikację w settings.py jako inspectdb_refactor

Następnie możesz go używać z linii poleceń jako:

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

Spowoduje to pomyślne utworzenie folderu modeli ze wszystkimi tabelami jako różnymi plikami modeli w aplikacji. Na przykład:

typowa struktura

Więcej szczegółów można znaleźć tutaj.

not2acoder
źródło
Dodaj więcej opisu tutaj
Mathews Sunny,
python3 manage.py inspectdb_refactor --database = xmldb --app = django_sb_admin Błąd: Nieznane polecenie: „inspectdb_refactor” Wpisz „manage.py help” do użycia.
ali reza
czy zarejestrowałeś tę aplikację w swoim settings.py jako inspectdb_refactor ?
not2acoder
Otrzymuję ten błąd get_meta() missing 1 required positional argument: 'is_partition'. Korzystanie z django 2.0
LTroya