Convertir le modèle Django en données de base de données

Créer un modèle

La première étape de l'écriture d'une application Web basée sur une base de données dans Django consiste à définir le modèle, c'est-à-dire la conception de la structure de la base de données et les métadonnées supplémentaires.

from django.db import models


class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')


class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

Chaque modèle est représenté comme une sous-classe de la classe django.db.models.Model. Chaque modèle a de nombreuses variables de classe et elles représentent toutes un champ de base de données dans le modèle.

Chaque champ est une instance de la classe Field - par exemple, un champ de caractère est représenté par CharField et un champ de date et d'heure est représenté par DateTimeField. Cela indiquera à Django le type de données à traiter pour chaque champ.

Le nom de chaque variable d'instance de la classe Field (telle que question_text ou pub_date) est également un nom de champ, il est donc préférable d'utiliser un format convivial pour la machine. Vous les utiliserez dans le code Python et la base de données les utilisera comme noms de colonne.

Vous pouvez utiliser les options facultatives pour définir un nom lisible par l'homme pour le champ. Cette fonctionnalité est utilisée dans de nombreuses parties internes de Django et fait partie de la documentation. Si ce nom n'est pas fourni pour un champ, Django utilisera le nom convivial pour la machine, qui est le nom de la variable. Dans l'exemple ci-dessus, nous avons uniquement défini un nom convivial pour Question.pub_date. Pour les autres champs du modèle, leurs noms conviviaux seront également utilisés comme noms conviviaux pour l'homme.

Des paramètres sont requis pour définir certaines instances de la classe Field. Par exemple, CharField nécessite un paramètre max_length. L'utilisation de ce paramètre n'est pas seulement utilisée pour définir la structure de la base de données, mais également pour vérifier les données.

Field peut également recevoir plusieurs paramètres facultatifs; dans l'exemple ci-dessus: nous définissons la valeur par défaut des votes, qui est la valeur par défaut, sur 0.

Notez qu'à la fin, nous avons défini une relation à l'aide de ForeignKey. Cela indiquera à Django que chaque objet Choice est associé à un objet Question. Django prend en charge toutes les relations de base de données courantes: plusieurs à un, plusieurs à plusieurs et un à un.

Modèle d'activation

L'extrait de code ci-dessus utilisé pour créer le modèle donne à Django de nombreuses informations. Avec ces informations, Django peut:

Créez un schéma de base de données pour cette application (générez une instruction CREATE TABLE).
Créez une API de base de données Python qui peut interagir avec les objets Question et Choice.

Mais nous devons d'abord installer l'application polls dans notre projet.
Afin d'inclure cette application dans notre projet, nous devons ajouter des paramètres dans la classe de configuration INSTALLED_APPS. Étant donné que la classe PollsConfig est écrite dans le fichier polls / apps.py, son chemin en pointillé est "polls.apps.PollsConfig". Après avoir ajouté un chemin en pointillé à la sous-clé INSTALLED_APPS dans le fichier projectName / settings.py , cela ressemble à ceci:

INSTALLED_APPS = [
    'polls.apps.PollsConfig',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

Maintenant, votre projet Django contiendra l'application polls. Ensuite, exécutez la commande suivante

$ python manage.py makemigrations polls

Vous verrez une sortie similaire à ce qui suit:

Migrations for 'polls':
  polls/migrations/0001_initial.py
    - Create model Question
    - Create model Choice

En exécutant la commande makemigrations, Django détectera vos modifications dans le fichier modèle (dans ce cas, vous en avez déjà obtenu un nouveau), et stockera les modifications en tant que migration.

La migration est la forme de stockage de Django pour les modifications des définitions de modèle (c'est-à-dire la structure de votre base de données) - ce ne sont en fait que quelques fichiers sur votre disque. Si vous le souhaitez, vous pouvez lire les données de migration de votre modèle, qui sont stockées dans polls / migrations / 0001_initial.py. Ne vous inquiétez pas, vous n'avez pas besoin de lire les fichiers de migration à chaque fois, mais ils sont conçus pour être lisibles par l'homme. Ceci vous permet d'ajuster manuellement la façon dont Django change.

Django a une commande qui effectue automatiquement la migration de la base de données et gère la structure de votre base de données de manière synchrone - cette commande est migrate, et nous la toucherons sous peu - mais d'abord, voyons quelles instructions SQL la commande de migration exécutera. La commande sqlmigrate reçoit un nom de migration et renvoie le SQL correspondant:

$ python manage.py sqlmigrate polls 0001

Vous verrez une sortie similaire à la suivante (j'ai réorganisé la sortie dans un format lisible par l'homme):

BEGIN;
--
-- Create model Question
--
CREATE TABLE "polls_question" (
    "id" serial NOT NULL PRIMARY KEY,
    "question_text" varchar(200) NOT NULL,
    "pub_date" timestamp with time zone NOT NULL
);
--
-- Create model Choice
--
CREATE TABLE "polls_choice" (
    "id" serial NOT NULL PRIMARY KEY,
    "choice_text" varchar(200) NOT NULL,
    "votes" integer NOT NULL,
    "question_id" integer NOT NULL
);
ALTER TABLE "polls_choice"
  ADD CONSTRAINT "polls_choice_question_id_c5b4b260_fk_polls_question_id"
    FOREIGN KEY ("question_id")
    REFERENCES "polls_question" ("id")
    DEFERRABLE INITIALLY DEFERRED;
CREATE INDEX "polls_choice_question_id_c5b4b260" ON "polls_choice" ("question_id");

COMMIT;

Le nom de la table de la base de données est concaténé par le nom de l'application (sondages) et la forme minuscule du nom du modèle (question et choix). (Vous pouvez personnaliser ce comportement si vous le souhaitez.)
Les clés primaires (ID) seront créées automatiquement. (Bien sûr, vous pouvez également le personnaliser.)
Par défaut, Django ajoutera la chaîne "_id" après le nom du champ de la clé étrangère. (Cela peut également être personnalisé.) La
relation de clé étrangère est générée par FOREIGN KEY. Vous n'avez pas besoin de vous soucier de la partie DEFERRABLE, elle dit simplement à PostgreSQL de créer la relation de clé étrangère après que toutes les transactions aient été exécutées.
Les instructions SQL générées sont personnalisées pour la base de données que vous utilisez, de sorte que les types de champs liés à la base de données, tels que auto_increment (MySQL), serial (PostgreSQL) et integer primary key autoincrement (SQLite), seront traités automatiquement par Django pour vous. Les choses liées aux guillemets - par exemple, s'il faut utiliser des guillemets simples ou doubles - seront également gérées automatiquement.
La commande sqlmigrate n'effectue pas réellement de migration dans votre base de données, mais affiche simplement la commande à l'écran, ce qui vous permet de voir quelles instructions SQL Django pense devoir être exécutées. Ceci est utile lorsque vous voulez voir ce que Django va faire, ou lorsque vous êtes un administrateur de base de données et que vous devez écrire des scripts pour traiter les bases de données par lots.
Maintenant, exécutez à nouveau la commande migrate pour créer la table de données du modèle nouvellement défini dans la base de données:

$ python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, polls, sessions
Running migrations:
  Rendering model states... DONE
  Applying polls.0001_initial... OK

Cette commande de migration sélectionne toutes les migrations qui n'ont pas été effectuées (Django suit quelles migrations ont été effectuées en créant une table spéciale django_migrations dans la base de données) et les applique à la base de données - c'est-à-dire pour synchroniser vos modifications du modèle avec la structure de la base de données .

La migration est une fonctionnalité très puissante, elle vous permet de modifier en permanence la structure de la base de données pendant le processus de développement sans avoir besoin de re-supprimer et de créer des tables - elle se concentre sur la mise à niveau en douceur de la base de données sans perdre de données. Nous en apprendrons plus sur cette partie dans les didacticiels suivants. Pour l'instant, il vous suffit de vous rappeler que la modification du modèle nécessite les trois étapes suivantes:

  1. Modifiez le fichier models.py pour changer de modèle.
  2. Exécutez python manage.py makemigrations pour générer des fichiers de migration pour les modifications de modèle.
  3. Exécutez python manage.py migrate pour appliquer la migration de la base de données.

La migration de la base de données est divisée en deux commandes, génération et application, afin que vous puissiez soumettre les données de migration sur le système de contrôle de code et les rendre disponibles dans plusieurs applications; cela facilitera non seulement le développement, mais donnera également aux autres développeurs et à l'utilisation dans l'environnement de production apporte la commodité.

Je suppose que tu aimes

Origine blog.csdn.net/p715306030/article/details/113198431
conseillé
Classement