2013-11-03 7 views
5

मैंने प्रलेखन पढ़ा है, लेकिन मुझे अभी भी यह समझ में नहीं आता है कि मेरे मॉडल को सही तरीके से कैसे कॉन्फ़िगर किया जाए। यह एक बहुत ही सरल टीवी शो डेटाबेस है और मैं इसे कॉन्फ़िगर करना चाहता हूं ताकि एक एपिसोड डेटाबेस में मौजूद एक मौजूदा शो पैरेंट उदाहरण हो। जब भी कोई शो हटा दिया जाता है, तो मैं चाहता हूं कि उसके सभी एपिसोड को कैस्केड हटा दिया जाए।SQLAlchemy रिश्ते कैस्केड हटाना

टी एल; डॉ: show.delete() -> सभी एपिसोड ईपी 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

उल्लिखित विकल्प डेटाबेस कैस्केड को हटा देता है जबकि 'कैस्केड' विकल्प क्लाइंट को हटा देता है। मेरा सुझाव है कि आप अपने डेटाबेस (क्षमताओं के लिए) और एसक्यूएलए दस्तावेज़ों पर पढ़ लें, अगर आप इस तरह से विचार करना चाहते हैं। 'कैस्केड' रास्ता अधिक बढ़िया है, लेकिन 'अयोग्य' तरीका * भी दिलचस्प हो सकता है। – javex

संबंधित मुद्दे