Можно ли сгенерировать модели django из базы данных?


91

Я возился с Django и Django ORM дома, и должен сказать, что считаю его одним из лучших с точки зрения простоты использования.

Однако мне было интересно, можно ли использовать это «наоборот».

По сути, я хотел бы сгенерировать модели Django из существующей схемы базы данных (из проекта, который не использует django и довольно старый).

Это возможно?

Обновление: рассматриваемая база данных - Oracle

Ответы:


107

Да, воспользуйтесь inspectdbкомандой:

inspectdb

Анализирует таблицы базы данных в базе данных, на которую указывает параметр DATABASE_NAME, и выводит модуль модели Django (файл models.py) на стандартный вывод.

Используйте это, если у вас есть устаревшая база данных, с которой вы хотите использовать Django. Сценарий проверит базу данных и создаст модель для каждой таблицы в ней.

Как и следовало ожидать, у созданных моделей будет атрибут для каждого поля в таблице. Обратите внимание, что в выводе имени поля inspectdb есть несколько особых случаев:

[...]


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

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

3
В Django есть почти все функции, о которых можно подумать. Он все еще поражает меня даже после многих лет использования.
Divick

Я не уверен, но ... может быть, вам стоит указать, что ссылка относится к devверсии (с большим акцентом ?? может и нет ..)
Федерико Галло

можно ли использовать ту же команду при вставке новой таблицы
selvakumar 06

34

(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' Введите 'manage.py help' для использования.
Али Реза

вы зарегистрировали это приложение в своем settings.py как inspectdb_refactor ?
not2acoder 04

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