2013-11-03 15 views
5

Ich habe die Dokumentation gelesen, aber ich kann immer noch nicht genau zu verstehen, wie ich meine Modelle richtig konfigurieren. Es ist eine sehr einfache TV-Show-Datenbank und ich möchte es so konfigurieren, dass eine Episode eine entsprechende show Elternteil-Instanz in der Datenbank haben muss. Wenn eine Show gelöscht wird, möchte ich, dass alle Episoden kaskadiert werden.SQLAlchemy Beziehung Kaskadenlöschung

TL; DR: show.delete() -> alle Episoden ep wo ep.show_id == show.id werden

gelöscht Wie kann ich das erreichen?

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') 

Antwort

8

Verwendung cascades:

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

Ich habe Leute gesehen verwenden 'onDelete = "CASCADE"', wie geht das auf mein Problem beziehen? –

+1

Die angegebene Option bewirkt, dass die Datenbank kaskadiert, während die Option 'cascade' den Client veranlasst, die Löschvorgänge zu organisieren. Ich schlage vor, Sie lesen in Ihrer Datenbank (für Fähigkeiten) und die SQLA-Dokumente, wenn Sie so denken möchten. Der "Kaskaden" -Weg ist feiner, aber auch der "Ondelete" -Weg * könnte interessant sein. – javex

Verwandte Themen