Можно ли генерировать модели 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 Рефакторинг.

Это разбивает модели на разные файлы внутри папки models из существующей базы данных. Это помогает управлять моделями, когда их становится много.

вы можете установить его через pip:

pip install django-inspectdb-refactor

затем зарегистрировать приложение в settings.py as inspectdb_refactor

после этого вы можете использовать его из командной строки как :

python manage.py inspectdb_refactor --database=your_dbname_defined_in_settings --app=your_app_label

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

typical structure

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