2012-01-23 12 views
6

प्राथमिक कुंजी के बिना ओआरएम घोषणा वर्ग का उपयोग कर तालिका कैसे बनाएं? यह शुरू करने में विफल रहा अगर मैंने primary_key = True कोई कॉलम नहीं बनाया है।SQLAlchemy घोषणात्मक: बिना किसी प्राथमिक कुंजी के टेबल?

+0

क्या मैं पूछ सकता हूं, आप ऐसा क्यों करना चाहेंगे? –

+0

@ जोनाथनऑंग क्योंकि मैं बाद में कुछ इंडेक्स जोड़ना चाहता हूं, और ऐसा लगता है कि MySQL कुछ ऐसा कर सकता है। – Determinant

उत्तर

11

SQLAlchemy कोर प्राथमिक कुंजी गायब होने की शिकायत नहीं करता है, इसलिए Table(…) के साथ ऐसी तालिका बनाना संभव है। लेकिन डिज़ाइन द्वारा ओआरएम को ऑब्जेक्ट से संबंधित पंक्ति की पहचान करने का एक तरीका चाहिए, इसलिए ओआरएम में प्राथमिक कुंजी के बिना तालिका का उपयोग करना संभव नहीं है।

आपको बाद में इस अनुक्रमणिका को जोड़ने की आवश्यकता क्यों है? क्या यह वास्तविक आवश्यकता है या कुछ समस्या हल करने का प्रयास है जिसे शायद अन्य तरीकों से हल किया जा सकता है? यदि आपको समग्र प्राथमिक कुंजी की आवश्यकता है, तो इसे primary_key=True कई Column एस में या __table_args__ में PrimaryKeyConstraint(…) निर्दिष्ट करके इसे परिभाषित करना संभव है।

+0

मैं एक बहु-कॉलम अनुक्रमणिका बनाने का इरादा रखता हूं। और यह बहुत अच्छा होगा अगर मैं स्पष्ट रूप से घोषणा कर सकता हूं कि सूचकांक बीटीआरई का उपयोग करके बनाया जाना चाहिए (मेरा डेटाबेस MySQL है)। कोई समाधान? – Determinant

+1

अधिकांश डेटाबेस (MySQL सहित) डिफ़ॉल्ट रूप से बी-ट्री का उपयोग करते हैं, इसलिए समग्र सूचकांक में सभी कॉलम के भाग में 'प्राथमिक_key = True' निर्दिष्ट करें। स्पष्ट बी-वृक्ष (या अन्य प्रकार) विनिर्देश 'इंडेक्स (...) 'में समर्थित है। उदा। PostgreSQL के लिए, लेकिन MySQL के लिए नहीं और 'PrimaryKeyConstraint' में नहीं। ऐसा लगता है कि स्क्लेक्लेमी में गायब सुविधा है। –

+6

आप घोषणाकर्ता '__mapper_args__ = {"primary_key" :(col1, col2)}} के साथ "प्राथमिक_की" तर्क में "प्राथमिक" में "प्राथमिक" कॉलम की सूची भी डाल सकते हैं}} – zzzeek

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