Django prend officiellement en charge les bases de données suivantes :
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', } }
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.
3 étapes :
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.
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)
$ 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
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
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
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.
# 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
biblio
.