J'ai joué avec Django et l'ORM Django à la maison, et je dois dire que je pense que c'est l'un des meilleurs là en termes de facilité d'utilisation.
Cependant, je me demandais s'il était possible de l'utiliser en "sens inverse".
Fondamentalement, 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 est assez ancien).
Est-ce possible?
pdate: la base de données en question est Oracle
Oui, utilisez la commande inspectdb
:
inspectdb
Introspection des tables de base de données dans la base de données pointée par le paramètre DATABASE_NAME et sortie un module de modèle Django (un fichier models.py) vers la sortie standard.
Utilisez-le si vous disposez d'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'il contient.
Comme vous pouvez vous y attendre, 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:
[...]
(Django 1.7.1) Il suffit d'exécuter python manage.py inspectdb
créera des classes pour toutes les tables de la base de données et les affichera sur la console.
$ python manage.py inspectdb
Enregistrez-le en tant que 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)
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 permet de 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 en tant que:
python manage.py inspectdb_refactor --database=your_dbname_defined_in_settings --app=your_app_label
Cela créera avec succès le dossier des modèles avec toutes les tables en tant que différents fichiers de modèle dans votre application. Par exemple:
Plus de détails peuvent être trouvés ici.