Codifier les relations entre les classes peut être difficile au début ! Cela ressemble à un tas de mots mélangés – cette chose connaît cette chose à travers cette chose, mais pas cette autre chose. L’utilisation d’exemples réels peut être utile pour visualiser ces relations.
Par exemple, disons que vous avez des astronautes. Au cours de nombreuses années, ces astronautes visiteront de nombreuses plantes ; une planète par mission. Ainsi, chaque mission compte un astronaute et une planète, et de nombreuses planètes sont visitées par de nombreux astronautes.
Dans Flask, la relation entre l'astronaute et la planète est une relation plusieurs-à-plusieurs, tandis que la relation entre l'astronaute et la mission et la planète et la mission est toutes deux une relation un-à-plusieurs. Nous avons trois modèles : Le modèle mission fonctionne comme une table de jointure entre le modèle astronaute et le modèle planète. Les classes sont appelées modèles car elles définissent (ou modélisent) les relations entre vos données.
Alors, comment coder ces relations ?
Je trouve qu'il est plus facile de commencer par la table de jointure, car je construis les deux relations à partir de là.
class Mission(db.Model): __tablename__ = 'missions' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String)
C'est par cela que nous commençons pour notre classe Mission.
Nous savons que chaque mission compte un astronaute :
astronaut = db.relationship
db.relationship définit la façon dont deux modèles sont liés les uns aux autres.
Connectons-le à la classe Astronaute....
astronaut = db.relationship('Astronaut')
et ajoutons maintenant la relation bidirectionnelle entre les deux modèles (Astronaut et Mission) :
astronaut = db.relationship('Astronaut', back_populates="missions")
Excellent travail ! Puisque Mission détient à la fois les relations Astronaute et Planète, faisons de même avec la planète :
planet = db.relationship('Planet', back_populates="missions")
Voici notre classe Mission avec les relations :
class Mission(db.Model): __tablename__ = 'missions' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String) astronaut = db.relationship('Astronaut', back_populates="missions") planet = db.relationship('Planet', back_populates="missions")
Génial ! Revenons en arrière et jetons un œil à nos instructions : Le modèle mission fonctionne comme une _join table entre le modèle astronaute et la planète modèle._
Nous devons donc relier l’astronaute à la mission et la planète à la mission. Commençons par Astronaute :
missions = db.relationship('Mission', back_populates="astronauts")
Les missions sont ici plurielles, car un astronaute en effectue plusieurs (espérons-le !).
Et puis Planet, qui devrait ressembler à ça :
missions = db.relationship('Mission', back_populates="planets")
GÉNIAL ! Tous ensemble, cela ressemble à :
class Planet(db.Model): __tablename__ = 'planets' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String) distance_from_earth = db.Column(db.Integer) nearest_star = db.Column(db.String) missions = db.relationship('Mission', back_populates="planet") class Astronaut(db.Model): __tablename__ = 'astronauts' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String) field_of_study = db.Column(db.String) missions = db.relationship('Mission', back_populates="astronaut") class Mission(db.Model): __tablename__ = 'missions' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String) astronaut = db.relationship('Astronaut', back_populates="astronauts") planet = db.relationship('Planet', back_populates="missions")
Enfin, ajoutons nos clés étrangères à notre table de missions. Une clé étrangère est un entier qui fait référence à un élément dans une autre base de données qui relie les deux. Par exemple, la clé étrangère de l'astronaute 1 est 1 dans le tableau des missions, donc chaque fois que nous voyons le chiffre 1 dans cette colonne, nous savons qu'il s'applique à cet astronaute !
Mission est la seule classe qui a besoin de clés étrangères, puisqu'elle est en charge de toutes les relations.
class Mission(db.Model, SerializerMixin): __tablename__ = 'missions' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String) astronaut_id = db.Column(db.Integer, db.ForeignKey('astronauts.id')) planet_id = db.Column(db.Integer, db.ForeignKey('planets.id')) astronaut = db.relationship('Astronaut', back_populates="missions") planet = db.relationship('Planet', back_populates="missions") serialize_rules = ('-astronaut.missions', '-astronaut.planets')
Travail fantastique ! Nous avons établi des relations entre nos modèles. Merci d'avoir codé !
Sources : Merci à Flatiron School pour ce laboratoire ! J'ai changé le nom de la classe « Scientifique » en « Astronaute ».
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!