2015-04-21 19 views
10

चलो कहते हैं कि मैं दो मॉडलSQLAlchemy अशक्त के रूप में ForeignKey

class EntityModel(DB.Model): 
    id = DB.Column(DB.Unicode(37), primary_key=True) 

class DocumentModel(DB.Model): 
    id = DB.Column(DB.Unicode(37), primary_key=True) 
    entity_id = DB.Column(DB.Unicode(37), DB.ForeignKey('entity.id', ondelete='cascade'), nullable=True) 
    entity = DB.relationship('EntityModel') 

है मैं ENTITY_ID शून्य के साथ नए दस्तावेज़ बना सकते हैं करते हैं अनुमति देते हैं। लेकिन एक बार जब मैं उस दस्तावेज़ में वैध entity_id सेट करता हूं तो मैं इसे और अधिक वापस नहीं कर सकता।

Cannot add or update a child row: a foreign key constraint fails

कैसे मैं कुछ दस्तावेज़ में ENTITY_ID को अशक्त सेट कर सकते हैं, अगर यह वैध ENTITY_ID है: मैं त्रुटि मिलती है?

उत्तर

5

आपकी ओआरएम परिभाषा ठीक दिखती है, DocumentModel.entity_id वास्तव में शून्य है। मैं इस मामले में क्या करूँगा MySQL में वास्तविक तालिका परिभाषा की जांच करें और सुनिश्चित करें कि यह आपकी ओआरएम परिभाषा के अनुरूप है, उदा।

-- make sure DocumentModel.entity_id is nullable : 
SHOW CREATE TABLE DocumentModel\G 
UPDATE DocumentModel.entity_id SET entity_id = NULL WHERE entity_id = XXX; 
+0

यह संभव है। जिस बिंदु को मैं अपने उत्तर में करने की कोशिश कर रहा था वह यह है कि आपको वास्तव में ऐसा नहीं करना चाहिए। एक पूर्ण कुंजी होने के अनिवार्य रूप से एक अनाथ रिकॉर्ड है। यह प्रबंधन को बाद में जोड़ता है और लगभग हमेशा सफाई की आवश्यकता होती है। JMHO। – rfportilla

-1

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

+5

यदि आप डाउनवोट करने जा रहे हैं, तो कृपया एक टिप्पणी जोड़ें क्यों। अकेले नीचे एक वोट किसी की मदद नहीं करता है। धन्यवाद! – rfportilla

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