Erkunden von Modellbeziehungen in Flask

Barbara Streisand
Freigeben: 2024-09-21 14:17:08
Original
453 Leute haben es durchsucht

Exploring Model Relationships in Flask

Beziehungen zwischen Klassen zu codieren kann zunächst eine Herausforderung sein! Es klingt wie ein Haufen zusammengewürfelter Wörter – dieses Ding kennt dieses Ding durch dieses Ding, aber nicht das andere Ding. Die Verwendung von Beispielen aus dem wirklichen Leben kann bei der Visualisierung dieser Beziehungen hilfreich sein.

Angenommen, Sie haben einige Astronauten. Im Laufe vieler Jahre werden diese Astronauten viele Werke besuchen; ein Planet pro Mission. Jede Mission hat also einen Astronauten und einen Planeten, und viele Planeten werden von vielen Astronauten besucht.

In Flask ist die Beziehung zwischen Astronaut und Planet eine Viele-zu-Viele-Beziehung, während die Beziehung zwischen Astronaut und Mission und Planet und Mission beide eine Eins-zu-Viele-Beziehung ist. Wir haben drei Modelle: Das Modell Mission fungiert als Verbindungstabelle zwischen dem Modell Astronaut und dem Modell Planet. Die Klassen werden Modelle genannt, weil sie die Beziehungen zwischen Ihren Daten definieren (oder modellieren).

Wie kodieren wir diese Beziehungen?

Ich finde es am einfachsten, mit der Verknüpfungstabelle zu beginnen, da ich von dort aus beide Beziehungen aufbaue.

class Mission(db.Model):
    __tablename__ = 'missions'

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String)
Nach dem Login kopieren

Damit beginnen wir für unseren Missionskurs.

Wir wissen, dass jede Mission einen Astronauten hat:

astronaut = db.relationship 
Nach dem Login kopieren

db.relationship definiert, wie zwei Modelle zueinander in Beziehung stehen.

Verknüpfen wir es mit der Astronautenklasse....

astronaut = db.relationship('Astronaut')
Nach dem Login kopieren

Und nun fügen wir die wechselseitige Beziehung zwischen den beiden Modellen (Astronaut und Mission) hinzu:

astronaut = db.relationship('Astronaut', back_populates="missions")
Nach dem Login kopieren

Tolle Arbeit! Da Mission sowohl die Astronauten- als auch die Planet-Beziehung enthält, machen wir dasselbe mit Planet:

planet = db.relationship('Planet', back_populates="missions")
Nach dem Login kopieren

Dies ist unsere Missionsklasse mit den Beziehungen:

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")

Nach dem Login kopieren

Super! Gehen wir zurück und werfen einen Blick auf unsere Anweisungen: Das Mission-Modell fungiert als _Join-Tabelle zwischen dem Astronautenmodell und dem Planeten model._
Wir müssen also Astronaut mit Mission und Planet mit Mission verknüpfen. Beginnen wir mit Astronaut:

missions = db.relationship('Mission', back_populates="astronauts")
Nach dem Login kopieren

Missionen sind hier Plural, weil ein Astronaut an einer Reihe davon teilnimmt (hoffentlich!).

Und dann Planet, der ähnlich aussehen sollte:

missions = db.relationship('Mission', back_populates="planets")
Nach dem Login kopieren

GROSSARTIG! Alles in allem sieht das so aus:

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")

Nach dem Login kopieren

Zuletzt fügen wir unsere Fremdschlüssel zu unserer Missionstabelle hinzu. Ein Fremdschlüssel ist eine Ganzzahl, die auf ein Element in einer anderen Datenbank verweist und die beiden miteinander verknüpft. Beispielsweise ist der Fremdschlüssel von Astronaut 1 in der Missionstabelle 1, sodass wir jedes Mal, wenn wir die Zahl 1 in dieser Spalte sehen, wissen, dass sie auf diesen Astronauten zutrifft!

Mission ist die einzige Klasse, die Fremdschlüssel benötigt, da sie für alle Beziehungen verantwortlich ist.

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')
Nach dem Login kopieren

Fantastische Arbeit! Wir haben einige Beziehungen zwischen unseren Modellen eingerichtet. Danke fürs Codieren!

Quellen: Vielen Dank an die Flatiron School für dieses Labor! Ich habe den Klassennamen „Wissenschaftler“ in „Astronaut“ geändert.

Das obige ist der detaillierte Inhalt vonErkunden von Modellbeziehungen in Flask. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!