É possível gerar modelos django a partir do banco de dados?

90

Tenho mexido com o Django e o Django ORM em casa, e tenho que dizer que acho que é um dos melhores que existem em termos de facilidade de uso.

No entanto, gostaria de saber se seria possível usá-lo "ao contrário".

Basicamente, o que eu gostaria de fazer é gerar modelos Django a partir de um esquema de banco de dados existente (de um projeto que não usa django e é muito antigo).

Isso é possível?

Atualização: o banco de dados em questão é Oracle

TM.
fonte

Respostas:

105

Sim, use o inspectdbcomando:

inspectdb

Inspeciona as tabelas do banco de dados no banco de dados apontado pela configuração DATABASE_NAME e gera um módulo de modelo Django (um arquivo models.py) para a saída padrão.

Use-o se você tiver um banco de dados legado com o qual gostaria de usar o Django. O script inspecionará o banco de dados e criará um modelo para cada tabela dentro dele.

Como você pode esperar, os modelos criados terão um atributo para cada campo da tabela. Observe que inspectdb tem alguns casos especiais em sua saída de nome de campo:

[...]

ars
fonte
1
Lendo essas informações, diz que é compatível com mysql, sqlite e postgresql. Infelizmente, o banco de dados que estou tentando usar é o Oracle :(
TM.
oof, não acredito que o Django tenha um bom suporte para Oracle no momento, tanto para frente quanto para trás: /
AlbertoPL
3
Django tem quase todos os recursos que você poderia imaginar. Ainda me surpreende mesmo depois de anos de uso.
Divick
Não tenho certeza, mas ... talvez você deva apontar que o link se refere à devversão (com mais ênfase ?? talvez não ..)
Federico Gallo
é possível usar o mesmo comando quando uma nova tabela é inserida
selvakumar
33

(Django 1.7.1) Simplesmente executando python manage.py inspectdbirá criar classes para todas as tabelas no banco de dados e exibir no console.

 $ python manage.py inspectdb

Salve como um arquivo usando o redirecionamento de saída padrão do Unix:

 $ python manage.py inspectdb > models.py

(Isso funciona para mim com mysql e django 1.9)

KKlalala
fonte
10

Eu fiz um aplicativo reutilizável baseado no utilitário de comando inspectdb do django, Django Inspectdb Refactor .

Isso divide os modelos em arquivos diferentes dentro da pasta de modelos de um banco de dados existente. Isso ajuda a gerenciar modelos quando eles se tornam grandes em número.

Você pode instalá-lo via pip:

pip install django-inspectdb-refactor

Em seguida, registre o aplicativo em settings.py como inspectdb_refactor

Depois disso, você pode usá-lo na linha de comando como:

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

Isso criará com sucesso a pasta de modelos com todas as tabelas como arquivos de modelo diferentes dentro do seu aplicativo. Por exemplo:

estrutura típica

Mais detalhes podem ser encontrados aqui.

not2acoder
fonte
Adicione mais descrições aqui
Mathews Sunny
python3 manage.py inspectdb_refactor --database = xmldb --app = django_sb_admin Erro: Comando desconhecido: 'inspectdb_refactor' Digite 'manage.py help' para uso.
ali reza
você registrou este aplicativo em settings.py como inspectdb_refactor ?
not2acoder
Estou recebendo este erro get_meta() missing 1 required positional argument: 'is_partition'. Usando django 2.0
LTroya