Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Meneroka Perhubungan Model dalam Flask

Meneroka Perhubungan Model dalam Flask

Barbara Streisand
Barbara Streisandasal
2024-09-21 14:17:08456semak imbas

Exploring Model Relationships in Flask

Hubungan pengekodan antara kelas boleh mencabar pada mulanya! Kedengarannya seperti sekumpulan perkataan yang dilemparkan bersama - perkara ini mengetahui perkara ini melalui perkara itu, tetapi bukan perkara lain itu. Menggunakan contoh kehidupan sebenar boleh membantu dalam menggambarkan perhubungan tersebut.

Sebagai contoh, katakan anda mempunyai beberapa angkasawan. Selama bertahun-tahun, angkasawan ini akan melawat banyak tumbuhan; satu planet setiap misi. Jadi setiap misi mempunyai seorang angkasawan dan satu planet, dan banyak planet dilawati oleh ramai angkasawan.

Dalam Flask, hubungan antara Angkasawan dan Planet ialah hubungan ramai-ke-banyak, manakala hubungan antara Angkasawan dan Misi dan Planet dan Misi adalah satu-dengan-banyak. Kami mempunyai tiga model: Model misi beroperasi sebagai jadual gabungan antara model angkasawan dan model planet. Kelas dipanggil model kerana ia mentakrifkan (atau memodelkan) perhubungan antara data anda.

Jadi, bagaimana kita mengekodkan perhubungan ini?

Saya rasa paling mudah untuk bermula dengan jadual gabungan, kerana saya sedang membina kedua-dua perhubungan dari situ.

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

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String)

Inilah yang kami mulakan untuk kelas Misi kami.

Kami tahu bahawa setiap misi mempunyai seorang angkasawan:

astronaut = db.relationship 

db.relationship mentakrifkan cara dua model berkaitan antara satu sama lain.

Jom sambung ke kelas Angkasawan....

astronaut = db.relationship('Astronaut')

dan sekarang mari kita tambahkan hubungan dua hala antara kedua-dua model (Angkasawan dan Misi):

astronaut = db.relationship('Astronaut', back_populates="missions")

Kerja bagus! Memandangkan Mission memegang kedua-dua hubungan Angkasawan dan Planet, mari kita lakukan perkara yang sama dengan planet:

planet = db.relationship('Planet', back_populates="missions")

Ini ialah kelas Misi kami dengan perhubungan:

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

Hebat! Mari kita kembali dan lihat arahan kami: Model misi beroperasi sebagai _join table antara model angkasawan dan planet model._
Jadi, kita perlu menghubungkan Angkasawan dengan Misi, dan Planet kepada Misi. Mari kita mulakan dengan Angkasawan:

missions = db.relationship('Mission', back_populates="astronauts")

Misi adalah jamak di sini, kerana seorang angkasawan meneruskan sekumpulan misi (harap-harap!).

Dan kemudian Planet, yang sepatutnya kelihatan serupa:

missions = db.relationship('Mission', back_populates="planets")

HEBAT! Semua, bersama-sama, ini kelihatan seperti:

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

Akhir sekali, mari tambah kunci asing kami pada jadual misi kami. Kunci asing ialah integer yang merujuk item dalam pangkalan data lain yang memautkan kedua-duanya bersama-sama. Contohnya, kunci asing angkasawan 1 ialah 1 dalam jadual misi, jadi setiap kali kita melihat nombor 1 dalam lajur itu, kita tahu ia terpakai kepada angkasawan itu!

Misi ialah satu-satunya kelas yang memerlukan kunci asing, kerana ia bertanggungjawab ke atas semua perhubungan.

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

Kerja yang hebat! Kami telah menyediakan beberapa perhubungan antara model kami. Terima kasih kerana mengekod!

Sumber: Terima kasih kepada Sekolah Flatiron untuk makmal ini! Saya menukar nama kelas 'Scientist' kepada 'Angkasawan'.

Atas ialah kandungan terperinci Meneroka Perhubungan Model dalam Flask. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:Menyumbang kepada repo lainArtikel seterusnya:Menyumbang kepada repo lain