Flask db.relationship

Flask db.db.relationship는 실제 DB에 나타나는 필드가 아니다.
이 가상 필드는 DB를 좀 더 높은 추상화 수준에서 바라볼 수 있게 도와주는 역할을 한다.

models.py 의 QuestionClass

class Question(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    subject = db.Column(db.String(200), nullable=False)
    content = db.Column(db.Text(), nullable=False)
    create_date = db.Column(db.DateTime(), nullable=False)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id', ondelete='CASCADE'), nullable=False)
    user = db.relationship('User', backref=db.backref('question_set'))

models.py의 UserClass

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(150), unique=True, nullable=False)
    password = db.Column(db.String(200), nullable=False)
    name = db.Column(db.String(150), nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False) 

질문 글을 쓴 유저의 아이디가 궁금하다면, 'Question.user.username'을 통해 접근할 수 있다.

'db.realationship'의 첫번째 인자는 객체이름을 받는다. (User)
'backref'는 User객체에 삽입되는 가상필드 이름이다. (question_set)
질문을 여러개 했을 때 자신이 작성한 질문을 user.question_set으로 확인할 수 있다.

이를 통해 DB 데이터를 파이썬코드 상에서 접근할 때,
고수준의 추상화된 레벨에서 사용할 수 있다.

출처

좋은 웹페이지 즐겨찾기