2013-11-03 2 views
5

설명서를 읽었지만 모델을 올바르게 구성하는 방법을 정확히 이해할 수 없습니다. 그것은 매우 간단한 TV 쇼 데이터베이스이고 에피소드 에 해당하는 Show 부모 인스턴스가 데이터베이스에 존재하도록 구성해야합니다. 쇼가 삭제 될 때마다 모든 에피소드를 계단식으로 삭제하기를 원합니다.SQLAlchemy 관계 계단식 삭제

TL; DR : show.delete() -> 모든 에피소드 EP ep.show_id == show.id는 내가이를 어떻게

을 삭제 어디?

class Show(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    title = db.Column(db.String(128), nullable=False) 

class Episode(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    title = db.Column(db.String(256), nullable=False) 

    # relationships 
    show_id = db.Column(db.Integer, db.ForeignKey('show.id'), nullable=False) 
    show = db.relationship('Show', 
          backref=db.backref('episodes'), 
          lazy='joined') 

답변

8

사용 cascades :

내가 본
show = db.relationship('Show', 
          backref=db.backref('episodes', cascade="all, delete-orphan"), 
          lazy='joined') 
+0

명 사용'ondelete = "CASCADE"'나의 문제에 관련이 있는가 어떻게? –

+1

위의 옵션은 데이터베이스 캐스케이드를 삭제하는 반면, 'cascade' 옵션은 클라이언트가 삭제를 구성하게합니다. 나는 당신이 그런 식으로 생각하기를 원한다면 데이터베이스 (능력을 위해)와 SQLA 문서를 읽어 보길 권한다. '계단식 '방식은보다 세분화되어 있지만'ondelete' way *도 흥미로울 것입니다. – javex