96 votes

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

Je me suis amusé avec Django et l'ORM Django à la maison, 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 "marche arrière".

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

Est-ce possible ?

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

110voto

ars Points 35803

Oui, utilisez le inspectdb commandement :

inspecter le site

Introspecte les tables de la base de données pointée par le paramètre DATABASE_NAME et produit un module de modèle Django (un fichier models.py) sur la sortie standard.

Utilisez cette option si vous avez une ancienne base de données 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 pouvez vous y attendre, les modèles créés auront un attribut pour chaque champ de la table. Notez que inspectdb a quelques cas spéciaux dans sa sortie de nom de champ :

[...]

1 votes

En lisant ces informations, il est dit qu'il est supporté par mysql, sqlite et postgresql. Malheureusement, la base de données que j'essaie d'utiliser est Oracle :(

0 votes

Oof, je ne crois pas que Django ait un bon support pour Oracle pour le moment, que ce soit en avant ou en arrière : /

5 votes

Django possède presque toutes les fonctionnalités auxquelles on peut penser. Il m'étonne toujours, même après des années d'utilisation.

38voto

KKlalala Points 364

(Django 1.7.1) Il suffit d'exécuter python manage.py inspectdb va créer des classes pour toutes les tables de la base de données et les afficher sur la console.

 $ python manage.py inspectdb

Sauvegardez ceci comme un fichier en utilisant la redirection de sortie standard d'Unix :

 $ python manage.py inspectdb > models.py

(Cela fonctionne pour moi avec mysql et django 1.9)

12voto

not2acoder Points 691

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

Cette méthode divise les modèles en différents fichiers dans le dossier des modèles d'une base de données existante. Cela facilite la gestion des modèles lorsqu'ils deviennent nombreux.

Vous pouvez l'installer via pip :

pip install django-inspectdb-refactor

Ensuite, enregistrez l'application dans settings.py comme inspectdb_refactor

Après cela, vous pouvez l'utiliser en 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 comme différents fichiers de modèles dans votre application. Par exemple :

typical structure

Pour plus de détails, voir aquí.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X