¿Es posible generar modelos de django a partir de la base de datos?

90

He estado jugando con Django y Django ORM en casa, y debo decir que siento que es uno de los mejores en términos de facilidad de uso.

Sin embargo, me preguntaba si era posible usarlo al revés.

Básicamente, lo que me gustaría hacer es generar modelos de Django a partir de un esquema de base de datos existente (de un proyecto que no usa django y es bastante antiguo).

es posible?

Actualización: la base de datos en cuestión es Oracle

TM.
fuente

Respuestas:

105

Sí, usa el inspectdbcomando:

inspeccionardb

Hace una introspección de las tablas de la base de datos en la base de datos a la que apunta la configuración DATABASE_NAME y genera un módulo de modelo Django (un archivo models.py) en la salida estándar.

Use esto si tiene una base de datos heredada con la que le gustaría usar Django. El script inspeccionará la base de datos y creará un modelo para cada tabla dentro de ella.

Como era de esperar, los modelos creados tendrán un atributo para cada campo de la tabla. Tenga en cuenta que inspectdb tiene algunos casos especiales en su salida de nombre de campo:

[...]

ars
fuente
1
Al leer esa información, dice que es compatible con mysql, sqlite y postgresql. Lamentablemente, la base de datos que estoy tratando de usar es Oracle :(
TM.
oof, no creo que Django tenga un buen soporte para Oracle en este momento, tanto hacia adelante como hacia atrás: /
AlbertoPL
3
Django tiene casi todas las características que uno podría pensar. Todavía me sorprende incluso después de años de uso.
Divick
No estoy seguro pero ... tal vez deberías señalar que el enlace se refiere a la devversión (¿con más énfasis? Quizás no ..)
Federico Gallo
¿Es posible usar el mismo comando cuando se inserta una nueva tabla?
selvakumar
33

(Django 1.7.1) Simplemente ejecutar python manage.py inspectdbcreará clases para todas las tablas en la base de datos y se mostrará en la consola.

 $ python manage.py inspectdb

Guarde esto como un archivo utilizando la redirección de salida estándar de Unix:

 $ python manage.py inspectdb > models.py

(Esto me funciona con mysql y django 1.9)

KKlalala
fuente
10

He creado una aplicación reutilizable basada en la utilidad de comando inspectdb de django, Django Inspectdb Refactor .

Esto divide los modelos en diferentes archivos dentro de la carpeta de modelos de una base de datos existente. Esto ayuda a administrar los modelos cuando aumentan de tamaño.

Puede instalarlo a través de pip:

pip install django-inspectdb-refactor

Luego registre la aplicación en settings.py como inspectdb_refactor

Después de esto, puede usarlo desde la línea de comando como:

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

Esto creará con éxito la carpeta de modelos con todas las tablas como diferentes archivos de modelo dentro de su aplicación. Por ejemplo:

estructura típica

Puede encontrar más detalles aquí.

not2acoder
fuente
Agregue una descripción más aquí
Mathews Sunny
python3 manage.py inspectdb_refactor --database = xmldb --app = django_sb_admin Error: Comando desconocido: 'inspectdb_refactor' Escriba 'manage.py help' para su uso.
Ali Reza
¿Registraste esta aplicación en tu settings.py como inspectdb_refactor ?
not2acoder
Recibo este error get_meta() missing 1 required positional argument: 'is_partition'. Usando django 2.0
LTroya