2013-11-03 22 views
5

私はドキュメントを読んだが、モデルを正しく構成する方法を正確に理解できていないように思えます。非常にシンプルなテレビ番組データベースで、エピソードに対応する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'という方法も興味深いかもしれません。 – javex

関連する問題