Rumah > pembangunan bahagian belakang > Tutorial Python > Meneroka Perhubungan Model dalam Flask

Meneroka Perhubungan Model dalam Flask

Barbara Streisand
Lepaskan: 2024-09-21 14:17:08
asal
498 orang telah melayarinya

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)
Salin selepas log masuk

Inilah yang kami mulakan untuk kelas Misi kami.

Kami tahu bahawa setiap misi mempunyai seorang angkasawan:

astronaut = db.relationship 
Salin selepas log masuk

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

Jom sambung ke kelas Angkasawan....

astronaut = db.relationship('Astronaut')
Salin selepas log masuk

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

astronaut = db.relationship('Astronaut', back_populates="missions")
Salin selepas log masuk

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")
Salin selepas log masuk

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

Salin selepas log masuk

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")
Salin selepas log masuk

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")
Salin selepas log masuk

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

Salin selepas log masuk

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')
Salin selepas log masuk

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!

sumber:dev.to
Kenyataan Laman Web ini
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 terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan