Можно ли генерировать модели django из базы данных?
я возился с Django и Django ORM дома, и я должен сказать, я чувствую, что это один из лучших там с точки зрения простоты использования.
однако мне было интересно, можно ли использовать его в "обратном".
в основном то, что я хотел бы сделать, это создать модели Django из существующей схемы базы данных (из проекта, который не использует django и довольно старый).
это возможно?
обновление: речь идет о базе данных Oracle
3 ответа:
да, используйте :
inspectdb
интроспекция таблиц базы данных в базе данных, на которую указывает параметр DATABASE_NAME, и вывод модуля модели Django (a models.py файл) к стандартному выходу.
используйте это, если у вас есть устаревшая база данных, с которой вы хотели бы использовать Django. Скрипт будет проверять база данных и создать модель для каждой таблицы в нем.
Как и следовало ожидать, созданные модели будут иметь атрибут для каждого поля в таблице. Обратите внимание, что inspectdb имеет несколько особых случаев в выводе имени Поля:
[...]
(Django 1.7.1) просто работает
python manage.py inspectdb
создавать классы для всех таблиц в базе данных и отображается в консоли.$ python manage.py inspectdb
сохраните это как файл, используя стандартное перенаправление вывода Unix:
$ python manage.py inspectdb > models.py
(это работает для меня с mysql и django 1.9)
Я сделал многоразовое приложение на основе утилиты команды inspectdb от django, Django Inspectdb Рефакторинг.
Это разбивает модели на разные файлы внутри папки модели из существующей базы данных. Это помогает управлять моделями, когда их становится много.
вы можете установить его через 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
Это позволит успешно создать папку модели со всеми таблицами в виде различных файлов модели внутри вашего приложения. Например:
более подробную информацию можно найти здесь.