Flask에서 모델 관계 탐색

Barbara Streisand
풀어 주다: 2024-09-21 14:17:08
원래의
468명이 탐색했습니다.

Exploring Model Relationships in Flask

클래스 간 관계를 코딩하는 것이 처음에는 어려울 수 있습니다! 그것은 마치 한 묶음의 단어가 함께 던져진 것처럼 들립니다. 이 것은 저 것을 통해 이것을 알지만 저 다른 것은 알지 못합니다. 실제 사례를 사용하면 이러한 관계를 시각화하는 데 도움이 될 수 있습니다.

예를 들어 우주비행사가 몇 명 있다고 가정해 보겠습니다. 수년에 걸쳐 이 우주비행사들은 많은 식물을 방문할 것입니다. 임무당 하나의 행성. 그래서 각 임무에는 한 명의 우주 비행사1개의 행성이 있으며 많은 행성많은 우주 비행사

를 방문합니다.

Flask에서 우주비행사와 행성의 관계는 다대다 관계인 반면, 우주비행사와 미션, 행성과 미션의 관계는 모두 일대다 관계입니다. 세 가지 모델이 있습니다. mission 모델은 astronaut 모델과 planet 모델 사이에서 조인 테이블으로 작동합니다. 클래스는 데이터 간의 관계를 정의(또는 모델링)하기 때문에 모델이라고 합니다.

그렇다면 이러한 관계를 어떻게 코딩해야 할까요?

조인 테이블에서 시작하는 것이 가장 쉬운데, 거기에서 두 관계를 모두 구축하기 때문입니다.

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

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String)
로그인 후 복사

이것이 우리의 미션 수업의 시작입니다.

우리는 각 임무우주비행사 한 명이 있다는 것을 알고 있습니다.

astronaut = db.relationship 
로그인 후 복사

db.relationship은 두 모델이 서로 어떻게 관련되어 있는지 정의합니다.

우주 비행사 수업과 연결해 볼까요....

astronaut = db.relationship('Astronaut')
로그인 후 복사

이제 두 모델(우주비행사와 미션) 사이의 양방향 관계를 추가해 보겠습니다.

astronaut = db.relationship('Astronaut', back_populates="missions")
로그인 후 복사

잘했어요! Mission은 우주비행사와 행성 관계를 모두 보유하므로 행성에도 동일한 작업을 수행해 보겠습니다.

planet = db.relationship('Planet', back_populates="missions")
로그인 후 복사

관계를 주제로 한 미션 수업입니다.

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

로그인 후 복사

멋져요! 다시 돌아가서 지침을 살펴보겠습니다. mission 모델은 astronaut 모델과 planet 사이에서 _join 테이블으로 작동합니다. 모델._
그래서 우리는 우주비행사를 미션에, 행성을 미션에 연결해야 합니다. 우주비행사부터 시작해 보세요:

missions = db.relationship('Mission', back_populates="astronauts")
로그인 후 복사

여기서 임무는 복수형입니다. 왜냐하면 우주비행사는 여러 임무를 수행하기 때문입니다(아마도!).

그리고 비슷하게 생긴 Planet은 다음과 같습니다.

missions = db.relationship('Mission', back_populates="planets")
로그인 후 복사

훌륭해요! 모두 합쳐서 다음과 같습니다.

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

로그인 후 복사

마지막으로 임무 테이블에 외래 키를 추가해 보겠습니다. 외래 키는 둘을 함께 연결하는 다른 데이터베이스의 항목을 참조하는 정수입니다. 예를 들어 우주 비행사 1의 외래 키는 임무 테이블에서 1이므로 해당 열에 숫자 1이 표시될 때마다 해당 우주 비행사에게 적용된다는 것을 알 수 있습니다!

미션은 모든 관계를 담당하기 때문에 외래키가 필요한 유일한 클래스입니다.

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')
로그인 후 복사

훌륭한 작업이었습니다! 우리는 모델 간에 몇 가지 관계를 설정했습니다. 코딩해주셔서 감사합니다!

출처: 이 실습을 제공한 Flatiron School에 감사드립니다! '과학자'라는 수업명을 '우주비행사'로 변경했습니다.

위 내용은 Flask에서 모델 관계 탐색의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿