Можно ли создавать модели 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
Это успешно создаст папку моделей со всеми таблицами в виде разных файлов моделей внутри вашего приложения. Например:
Более подробную информацию можно найти здесь.