관계

class Role(db.Model):
    #...
    users = db.relationship('User', backref='role')
  
  
class User(db.Model):
    #...
    role_id = db.Column(db.Integer, db.Foreignkey('roles.id')
  • User 모델에 추가된 role_id 열은 외래키로 정의되는데 db.Foreignkey()에 전달한 'roles.id'인수는 열이 roles 테이블에 있는 행에서 id값을 갖는 것으로 해석
  • Role 클래스의 인스턴스로 주어진 users 속성은 그 규칙과 연관된 사용자의 리스트를 리턴
  • backref 인수는 User 모델에 role 속성을 추가하여 관계의 반대방향을 정의하고 이 속성은 Role 모델이 외래키 대신 오브젝트에 접근하다록 role_id 대신 사용

 

SQLAlchemy 관계 옵션

옵션 이름
설명
backref관계에서 다른 모델에 있는 백 레퍼런스를 추가
primaryjoin두 개 모델 사이의 join 조건을 명확하게 설정. 모호한 관계에서만 필요
lazy

관계된 아이템에 대하여 어떻게 로드되는지 설정

  • select : 첫 번째로 액세스할 때 아이템이 로드
  • immediate : 소스 오브젝트가 로드될 때 아이템 로드
  • joined : 아이템이 즉시 로드되나 조인으로 로드
  • subquery : 아이템에 즉시 로드되나 서브쿼리로 로드
  • noload : 아이템이 절대 로드되지 않음
  • dynamic : 아이템을 로드하는 대신에 로드하는 쿼리가 주어짐
uselistFalse로 설정하면 리스트 대신 스칼라 사용
order_by관계에서 아이템을 위해 사용되는 순서로 설정
secondary다대다관계에서 사용하기 우해 관계 테이블의 이름을 설정
secondaryjoinSQLAlchemy가 결정하지 못할 때 다대다 관계를 위한 두 번째 조인 조건을 설정


'개발 > Python' 카테고리의 다른 글

설치(Flask)  (0) 2018.09.10
블루프린트(Flask)  (0) 2018.09.10
Jinja2 템플릿(flask)  (0) 2018.09.10
함수  (0) 2018.09.10
패키지  (0) 2018.09.10

+ Recent posts