Modèles Django
Django offre un excellent support pour diverses bases de données, notamment : PostgreSQL, MySQL, SQLite, Oracle.
Django fournit une API d'appel unifiée pour ces bases de données. Nous pouvons choisir différentes bases de données selon nos besoins métier.
MySQL est la base de données la plus couramment utilisée dans les applications web. Dans ce chapitre, nous utiliserons MySQL comme exemple pour la démonstration. Vous pouvez utiliser leTutoriel MySQLde ce site pour en savoir plus sur les bases de MySQL.
Si vous n'avez pas installé le pilote mysql, vous pouvez exécuter la commande suivante pour l'installer :
sudo pip3 install pymysql
ORM Django
Les modèles Django utilisent l'ORM intégré.
Le mappage objet-relationnel (ORM en abrégé) est utilisé pour mettre en œuvre la conversion entre les données de différents types de systèmes dans les langages de programmation orientés objet.
L'ORM agit comme un pont entre la couche de logique métier et la couche de base de données.
L'ORM persiste automatiquement les objets d'un programme dans la base de données en utilisant des métadonnées qui décrivent le mappage entre les objets et la base de données.

Avantages de l'utilisation d'ORM :
- Améliorer l'efficacité de développement.
- Différentes bases de données peuvent être changées en douceur.
Inconvénients de l'utilisation d'ORM :
- Lorsque le code ORM est converti en instructions SQL, cela prend un certain temps, et l'efficacité d'exécution sera réduite.
- Écrire du code ORM pendant longtemps réduira la capacité à écrire des instructions SQL.
Processus d'analyse d'ORM :
- 1. L'ORM convertit le code Python en instructions SQL.
- 2. L'instruction SQL est transmise au serveur de base de données via pymysql.
- 3. Exécuter l'instruction SQL dans la base de données et renvoyer le résultat.
Table de mappage ORM :

Configuration de la base de données
Comment Django utilise la base de données MySQL
Syntaxe de création d'une base de données MySQL (l'ORM ne peut pas opérer au niveau de la base de données, il peut uniquement opérer sur les tables de données) :
create database 数据库名称 default charset=utf8; # 防止编码问题,指定为 utf8
Par exemple, nous créons une base de données nommée example et spécifions l'encodage comme utf8 :
create database example default charset=utf8;
Dans le fichier settings.py du projet, trouvez l'élément de configuration DATABASES et modifiez ses informations comme suit :
HelloWorld/HelloWorld/settings.py : code du fichier :
Si vous utilisez Python2.x, des commentaires en chinois sont ajoutés ici, donc vous devez ajouter ce qui suit au début du fichier HelloWorld/settings.py :# -*- coding: UTF-8 -*-。
Ce qui précède contient le nom de la base de données et les informations d'utilisateur, qui sont identiques aux paramètres correspondants de base de données et d'utilisateur dans MySQL. Django se connecte à la base de données et à l'utilisateur correspondants dans MySQL selon ce paramètre.
Ensuite, indiquez à Django d'utiliser le module pymysql pour se connecter à la base de données mysql :
Exemple
import pymysql
pymysql.install_as_MySQLdb()
Définir le modèle
Créer une application
Django stipule que si vous souhaitez utiliser des modèles, vous devez créer une application. Nous utilisons la commande suivante pour créer une application appelée TestModel :
django-admin startapp TestModel
La structure du répertoire est la suivante :
HelloWorld |-- HelloWorld |-- manage.py ... |-- TestModel | |-- __init__.py | |-- admin.py | |-- models.py | |-- tests.py | `-- views.py
Nous modifions le fichier TestModel/models.py, le code est le suivant :
HelloWorld/TestModel/models.py : Code du fichier :
Le nom de la classe ci-dessus représente le nom de la table de base de données, et la classe hérite de models.Model. Les champs à l'intérieur de la classe représentent les champs (name) dans la table de données, et les types de données sont déterminés par CharField (équivalent à varchar), DateField (équivalent à datetime). Le paramètre max_length limite la longueur.
Ensuite, trouvez l'entrée INSTALLED_APPS dans settings.py, comme suit :
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'TestModel', # 添加此项
)
Exécutez dans la ligne de commande :
$ python3 manage.py migrate # 创建表结构 $ python3 manage.py makemigrations TestModel # 让 Django 知道我们在我们的模型有一些变更 $ python3 manage.py migrate TestModel # 创建表结构
Lorsque vous voyez les mots « Creating table... » sur quelques lignes, votre table de données a été créée.
Creating tables ... …… Creating table TestModel_test #我们自定义的表 ……
La structure du nom de table est : nom_application_nom_classe (par exemple, TestModel_test).
Remarque :Bien que nous n'ayons pas défini de clé primaire pour la table dans models, Django ajoutera automatiquement un id comme clé primaire.
Messages d'erreur courants
Si le message d'erreur suivant apparaît lors de l'exécution de la commande ci-dessus :

La raison est que MySQLclient ne prend actuellement en charge que Python 3.4, donc si vous utilisez une version plus récente de Python, vous devez modifier comme suit :
À l'aide du chemin de fichier dans le message d'erreur, trouvez le fichier base.py dans le chemin ...site-packages\Django-2.0-py3.6.egg\django\db\backends\mysql, et commentez ces deux lignes de code (le code se trouve au début du fichier) :
if version < (1, 3, 13):
raise ImproperlyConfigured('mysqlclient 1.3.13 or newer is required; you have %s.' % Database.__version__)

Généralement, cliquez sur les informations de chemin du fichier de code dans l'erreur, et cela passera automatiquement au numéro de ligne dans le fichier d'erreur. À ce stade, nous commentons la ligne de code qui a signalé l'erreur.
Si le message d'erreur suivant apparaît :

Nous cliquons sur le chemin du fichier de code de l'erreur, accédons au numéro de ligne dans le fichier d'erreur, et à ce stade nous ajoutons ce qui suit avant la ligne de code en erreur :
query = query.encode()

Opération de base de données
Ensuite, nous ajoutons le fichier testdb.py (décrit ci-dessous) dans le répertoire HelloWorld, et modifions urls.py :
HelloWorld/HelloWorld/urls.py : code du fichier :
Ajouter des données
Pour ajouter des données, vous devez d'abord créer un objet, puis exécuter la fonction save, ce qui équivaut à INSERT en SQL :
HelloWorld/HelloWorld/testdb.py : code du fichier :
Visitezhttp://127.0.0.1:8000/testdbEnsuite, vous pouvez voir un message indiquant que les données ont été ajoutées avec succès.
Le résultat de sortie est le suivant :

Obtenir les données
Django propose plusieurs façons de récupérer le contenu de la base de données, comme le montre le code suivant :
HelloWorld/HelloWorld/testdb.py : code du fichier :
Mettre à jour les données
Pour modifier les données, vous pouvez utiliser save() ou update() :
HelloWorld/HelloWorld/testdb.py : code du fichier :
Supprimer des données
Pour supprimer un objet dans la base de données, il vous suffit d'appeler la méthode delete() de cet objet :