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

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

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

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

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

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

3 ответа

Решение

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

inspectdb

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

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

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

[...]

(Джанго 1.7.1) Просто бег python manage.py inspectdb создаст классы для всех таблиц в базе данных и отобразит на консоли.

 $ python manage.py inspectdb

Сохраните это как файл, используя стандартное перенаправление вывода Unix:

 $ python manage.py inspectdb > models.py

(Это работает для меня с MySQL и Django 1.9)

Я создал приложение многократного использования, основанное на командной утилите 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

Это успешно создаст папку моделей со всеми таблицами в виде разных файлов моделей внутри вашего приложения. Например:

типичная структура

Более подробную информацию можно найти здесь.

Другие вопросы по тегам