Est-il possible de générer des modèles django à partir de la base de données?

90

J'ai joué avec Django et Django ORM chez moi, et je dois dire que je pense que c'est l'un des meilleurs en termes de facilité d'utilisation.

Cependant, je me demandais s'il était possible de l'utiliser en "reverse".

En gros, ce que je voudrais faire, c'est générer des modèles Django à partir d'un schéma de base de données existant (à partir d'un projet qui n'utilise pas django et qui est assez ancien).

Est-ce possible?

Mise à jour: la base de données en question est Oracle

TM.
la source

Réponses:

105

Oui, utilisez la inspectdbcommande:

inspectdb

Introspecte les tables de la base de données dans la base de données pointées par le paramètre DATABASE_NAME et génère un module de modèle Django (un fichier models.py) vers la sortie standard.

Utilisez ceci si vous avez une base de données héritée avec laquelle vous souhaitez utiliser Django. Le script inspectera la base de données et créera un modèle pour chaque table qu'elle contient.

Comme vous vous en doutez, les modèles créés auront un attribut pour chaque champ de la table. Notez que inspectdb a quelques cas particuliers dans sa sortie de nom de champ:

[...]

ars
la source
1
En lisant ces informations, il est indiqué qu'elles sont prises en charge pour mysql, sqlite et postgresql. Malheureusement, la base de données que j'essaie d'utiliser est Oracle :(
TM.
oof, je ne crois pas que Django a un bon support pour Oracle pour le moment, à la fois vers l'avant ou vers l'arrière: /
AlbertoPL
3
Django a presque toutes les fonctionnalités auxquelles on pourrait penser. Cela m'étonne toujours même après des années d'utilisation.
Divick
Je ne suis pas sûr mais ... peut-être devriez-vous préciser que le lien se réfère à la devversion (avec plus d'insistance ?? peut-être pas ..)
Federico Gallo
est-il possible d'utiliser la même commande quand une nouvelle table est insérée
selvakumar
33

(Django 1.7.1) L'exécution simple python manage.py inspectdbcréera des classes pour toutes les tables de la base de données et s'affichera sur la console.

 $ python manage.py inspectdb

Enregistrez-le sous forme de fichier en utilisant la redirection de sortie Unix standard:

 $ python manage.py inspectdb > models.py

(Cela fonctionne pour moi avec mysql et django 1.9)

KKlalala
la source
10

J'ai créé une application réutilisable basée sur l'utilitaire de commande inspectdb de django, Django Inspectdb Refactor .

Cela divise les modèles en différents fichiers dans le dossier des modèles d'une base de données existante. Cela aide à gérer les modèles lorsqu'ils deviennent nombreux.

Vous pouvez l'installer via pip:

pip install django-inspectdb-refactor

Enregistrez ensuite l'application dans settings.py en tant que inspectdb_refactor

Après cela, vous pouvez l'utiliser à partir de la ligne de commande comme:

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

Cela créera avec succès un dossier de modèles avec toutes les tables sous forme de fichiers de modèle différents dans votre application. Par exemple:

structure typique

Plus de détails peuvent être trouvés ici.

not2acoder
la source
Ajoutez plus de description ici
Mathews Sunny
python3 manage.py inspectdb_refactor --database = xmldb --app = django_sb_admin Erreur: commande inconnue: 'inspectdb_refactor' Tapez 'manage.py help' pour l'utilisation.
ali reza le
avez-vous enregistré cette application dans votre settings.py en tant que inspectdb_refactor ?
not2acoder
Je reçois cette erreur get_meta() missing 1 required positional argument: 'is_partition'. Utilisation de django 2.0
LTroya