Чи можна генерувати моделі 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.