2013-11-03 97 views
5

我已閱讀文檔,但我仍然無法準確理解如何正確配置我的模型。這是一個非常簡單的電視節目數據庫,我想對其進行配置,這樣一個劇集必須有一個對應的顯示父節點實例存在於數據庫中。每當一個節目被刪除時,我希望它的所有劇集都被級聯刪除。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」方式*也會很有趣。 – javex