meta data for this page
Base de données
Django prend officiellement en charge les bases de données suivantes :
- PostgreSQL
- MariaDB
- MySQL
- Oracle
- SQLite
Configuration
Par défaut, c'est sqlite qui est configuré dans le fichier settings.py
Nous utiliserons cette base pour le cours
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': BASE_DIR / 'db.sqlite3', } }
INSTALLED_APPS
Afin d'utiliser toutes les fonctionnalités liées aux bases de données, il faut que l'application soit inscrite dans la liste INSTALLED_APPS
du fichier settings.py
du projet. N’oubliez pas d’ajouter vos applications dans cette liste.
Création des tables de bases de données
3 étapes :
- Créer un modèle
- Créer une migration
- Exécuter la migration
Créer un modèle
Exemple d'un modèle pour des articles de blogue
Fichier blogue/models.py
from django.db import models # Create your models here. class Article(models.Model): title = models.CharField(max_length=255) content = models.TextField(blank=True) is_draft = models.BooleanField(default=False) created_at = models.DateTimeField(auto_now_add=True)
Création d'une classe qui hérite de models.Model
. Cette classe définit une table de la base de données
Définition des champs de la table avec le type et les options.
- Documentation pour les types de champs.
- Voir aussi ce tableau récapitulatif des types de champs disponibles
Créer une migration
Les fichiers migrations permettent d'enregistrer les caractéristiques des tables de notre base de données. Ils définissent le “plan des tables”.
Nous devons donc créer une migration chaque fois que nous apportons un changement à nos modèles.
Ces migrations sont stockées dans le dossier migrations
de chaque application
exemple: blogue/migrations
Pour créer les fichiers de migration, exécuter par exemple :
$ python manage.py makemigrations # ou pour une application en particulier $ python manage.py makemigrations blogue
(Voir le dossier migrations
pour avoir un aperçu des fichiers créer par la migration)
Exécuter la migration
$ python manage.py migrate # ou pour une application en particulier $ python manage.py migrate blogue
Cela va créer la ou les tables dans la base de données
Vérifier votre base de données afin de contrôler que la table a été créée correctement.
Si besoin, on peut afficher le code SQL correspondant à une migration. Exemple pour la migration 0001 de la table blogue
python .\manage.py sqlmigrate blogue 0001
Inversion des migrations
Les migrations peuvent être inversées avec migrate en passant le numéro de la migration précédente. Par exemple, pour inverser la migration blogue.0002
$ python manage.py migrate blogue 0002
Pour défaire toutes les migrations appliquées d’une application, utilisez le terme zero
$ python manage.py migrate blogue zero
Relations
Relations plusieurs-à-un
Exemple: un article peut avoir une catégorie et une catégorie peut appartenir à plusieurs articles
Mise en place d'une clé étrangère dans la table article
.
class Category(models.Model): title = models.CharField(max_length=255) description = models.TextField(blank=True) class Article(models.Model): title = models.CharField(max_length=255) content = models.TextField(blank=True) is_draft = models.BooleanField(default=False) created_at = models.DateTimeField(auto_now_add=True) category = models.ForeignKey(Category, on_delete=models.CASCADE)
Documentation de ForeignKey
Relations plusieurs-à-plusieurs
Exemple: un article peut avoir plusieurs catégories et une catégorie peut appartenir à plusieurs articles.
Mise en place d'une table de jointure article_categories
.
class Category(models.Model): title = models.CharField(max_length=255) description = models.TextField(blank=True) class Article(models.Model): title = models.CharField(max_length=255) content = models.TextField(blank=True) is_draft = models.BooleanField(default=False) created_at = models.DateTimeField(auto_now_add=True) categories = models.ManyToManyField(Category)
On peut voir que la table blogue_article_categories
a été créée.
Sauvegarde de la BD dans un fichier
# Enregistre dans un fichier json python .\manage.py dumpdata -o mydata.json # Enregistre dans un fichier json au format compressé python .\manage.py dumpdata -o mydata.json.gz
Charger les données dans la BD à partir d'un fichier de sauvegarde
Exercice
- Créer un projet Django.
- Créer une nouvelle application nommée
biblio
. - Mettre en place le code pour créer des tables dans la base de données suivant le modèle ci-dessous.