2016-01-27 12 views
5

को हटाने की कोशिश करते समय निर्भरता नियम एसक्यूएल-कीमिया में प्राथमिक कुंजी कॉलम को खाली करने का प्रयास किया गया है। Userownedshare तालिका और Share तालिका के बीच मेरे कई संबंध हैं।रिकॉर्ड

जब मैं डेटाबेस मैं निम्नलिखित त्रुटि मिलती है से एक Userownedshare प्रविष्टि को हटाने: AssertionError: Dependency rule tried to blank-out primary key column 'share.ticker'

यह समझ में आता है के रूप में Userownedshare में ticker क्षेत्र Share तालिका में एक विदेशी कुंजी है। हालांकि मैं इस त्रुटि को ठीक करने का तरीका नहीं समझ सकता। मुझे लगता है कि जब मैं Share प्रविष्टि अनाथ है, तो मैं एक कैस्केडिंग विलोपन स्थापित करना चाहता हूं लेकिन मैं यह नहीं कर सकता कि यह कैसे करें, मैंने प्रलेखन पढ़ा है, लेकिन मैं सिर्फ विभिन्न प्रकार की त्रुटियों के साथ समाप्त होता हूं, इसलिए मुझे लगता है कि मुझे कुछ तुच्छ याद आ रही है । आशा है कि कोई मदद कर सकता है, धन्यवाद!


यहाँ मेरी कोड है:

class Userownedshare(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    ticker = db.Column(db.String(20), db.ForeignKey('share.ticker')) 
    user = db.Column(db.String, db.ForeignKey('user.username')) 
    quantity = db.Column(db.Integer, nullable=False) 
    dividends = db.Column(db.Float, server_default="0.0") 
    triggerlevel = db.Column(db.Integer) 
    smsalert = db.Column(db.Boolean) 
    emailalert = db.Column(db.Boolean) 
    portfolioid = db.Column(db.String(50)) 
    name = db.relationship('Share', backref='userownedshare' , foreign_keys=[ticker]) 

class Share(db.Model): 
    id = db.Column(db.Integer) 
    name = db.Column(db.String(50), nullable=False) 
    ticker = db.Column(db.String(50), db.ForeignKey('userownedshare.ticker'), primary_key=True) 
    tickermatch = db.relationship('Userownedshare', backref='share', foreign_keys=[ticker]) 

उत्तर

3

ठीक है, तो कुछ परीक्षण और त्रुटि के बाद मैं इसे बाहर काम किया। मुझे Share कक्षा में tickermatch संबंधों में cascade="all, delete-orphan", जोड़ने की आवश्यकता है।

लेकिन मैं यह भी Userownedshare कक्षा में name रिश्ते को lazy="joined" जोड़ने की जरूरत

class Userownedshare(db.Model): 
id = db.Column(db.Integer, primary_key=True) 
ticker = db.Column(db.String(20), db.ForeignKey('share.ticker')) 
user = db.Column(db.String, db.ForeignKey('user.username')) 
quantity = db.Column(db.Integer, nullable=False) 
dividends = db.Column(db.Float, server_default="0.0") 
triggerlevel = db.Column(db.Integer) 
smsalert = db.Column(db.Boolean) 
emailalert = db.Column(db.Boolean) 
portfolioid = db.Column(db.String(50)) 
name = db.relationship('Share', backref='userownedshare', foreign_keys=[ticker], lazy="joined") 

class Share(db.Model): 
id = db.Column(db.Integer) 
name = db.Column(db.String(50), nullable=False) 
ticker = db.Column(db.String(50), db.ForeignKey('userownedshare.ticker'), primary_key=True) 
tickermatch = db.relationship('Userownedshare', backref='share', cascade="all, delete-orphan", lazy="joined") 
संबंधित मुद्दे