Чи можна генерувати моделі django з бази даних?


90

Я возився з Django та Django ORM вдома, і я повинен сказати, я відчуваю, що це один із найкращих з точки зору простоти використання.

Однак мені було цікаво, чи можна використовувати його в "зворотному порядку".

В основному, що я хотів би зробити, це генерувати моделі Django з існуючої схеми бази даних (з проекту, який не використовує django і є досить старим).

Чи можливо це?

Оновлення: розглядається база даних Oracle

Відповіді:


105

Так, використовуйте inspectdbкоманду:

inspectdb

Проводить аналіз таблиць бази даних у базі даних, на які вказує параметр DATABASE_NAME, і виводить модуль моделі Django (файл models.py) до стандартного виводу.

Використовуйте це, якщо у вас є застаріла база даних, з якою ви хотіли б використовувати Django. Сценарій перевірить базу даних і створить модель для кожної таблиці в ній.

Як і слід було очікувати, створені моделі матимуть атрибут для кожного поля в таблиці. Зверніть увагу, що inspectdb має кілька особливих випадків у виведенні імені поля:

[...]


1
Читаючи цю інформацію, він каже, що вона підтримується для mysql, sqlite та postgresql. На жаль, базою даних, яку я намагаюся використовувати, є Oracle :(
TM.

oof, я не вірю, що на даний момент Django має хорошу підтримку Oracle, як вперед, так і назад: /
AlbertoPL

3
Django має майже всі функції, про які можна подумати. Це все ще вражає мене навіть після багатьох років використання.
Divick

Я не впевнений, але ... можливо, вам слід зазначити, що посилання посилається на devверсію (з більшим наголосом ?? можливо, ні ..)
Федеріко Галло

чи можна використовувати ту саму команду, коли вставляється нова таблиця
selvakumar

33

(Django 1.7.1) Простий запуск python manage.py inspectdbстворить класи для всіх таблиць у базі даних і відобразиться на консолі.

 $ python manage.py inspectdb

Збережіть це як файл, використовуючи стандартне переспрямування виходу Unix:

 $ python manage.py inspectdb > models.py

(Це працює для мене з mysql та django 1.9)


10

Я створив багаторазовий додаток на основі командної утиліти django inspectdb, Django Inspectdb Refactor .

Це розбиває моделі на різні файли в папці моделей із існуючої бази даних. Це допомагає керувати моделями, коли їх стає великою кількістю.

Ви можете встановити його через pip:

pip install django-inspectdb-refactor

Потім зареєструйте програму в settings.py як inspectdb_refactor

Після цього ви можете використовувати його з командного рядка як:

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

Це дозволить створити папку з моделями з усіма таблицями як різними файлами моделей у вашому додатку. Наприклад:

типова структура

Детальніше тут.


Додайте ще якийсь опис сюди
Метьюз Сонячний

python3 manage.py inspectdb_refactor --database = xmldb --app = django_sb_admin Помилка: Невідома команда: 'inspectdb_refactor' Введіть 'help.py help' для використання.
ali reza

ви зареєстрували цю програму у своєму settings.py як inspectdb_refactor ?
not2acoder

Я отримую цю помилку get_meta() missing 1 required positional argument: 'is_partition'. Використання django 2.0
LTroya
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.