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

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:

[…]


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)


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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.