web-dev-qa-db-fra.com

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

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

79
TM.

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:

[...]

93
ars

(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)

28
KKlalala

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:

typical structure

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

6
not2acoder