2010-07-31 21 views
7

मैं कुछ हल्के डेटा परिवर्तनों के साथ एक MySQL डेटाबेस से डेटा निर्यात करने के लिए एक छोटा साक्लेल्मी शिम लिख रहा हूं-ज्यादातर फ़ील्ड नाम बदल रहा है। मेरी वर्तमान लिपि ठीक काम करती है, लेकिन मुझे अनिवार्य रूप से कक्षा के घोषणा में एक बार-बार मेरे मॉडल का वर्णन करने की आवश्यकता होती है और एक बार फील्ड नामों की एक सूची के रूप में फिर से शुरू करने की आवश्यकता होती है।घोषणात्मक कक्षाओं के SQLAlchemy आत्मनिरीक्षण

मैं कॉलम एक्सेसर्स पंक्ति पंक्तियों पर गुणों की पहचान करने के लिए आत्मनिरीक्षण का उपयोग करने का तरीका जानने का प्रयास कर रहा हूं। निम्नलिखित काम करता है लगभग पूरी तरह से:

for attr, value in self.__class__.__dict__.iteritems(): 
    if isinstance(value, sqlalchemy.orm.attributes.InstrumentedAttribute): 
     self.__class__._columns.append(attr) 
सिवाय इसके कि मेरे से-अनेक संबंध accessors भी sqlalchemy.orm.attributes.InstrumentedAttribute के उदाहरण हैं, और मैं उन को छोड़ करने की जरूरत है

। क्या मैं कक्षा के शब्दकोश का निरीक्षण कर रहा हूं, जबकि दोनों के बीच अंतर करने का कोई तरीका है?

sqlalchemy आत्मनिरीक्षण पर मुझे जो दस्तावेज मिल रहे हैं, उनमें मेटाडेटाटेबल को देखना शामिल है, लेकिन चूंकि मैं कॉलम का नाम बदल रहा हूं, इसलिए यह डेटा मामूली रूप से मैपबल नहीं है।

उत्तर

1

मैं अभी भी इस प्रश्न का उत्तर देखना चाहता हूं, लेकिन मैंने रिश्ते के एक्सेसर्स (उदाहरण के लिए 'ओथेंटेंटिटी' के बजाय '_therentity') नाम से काम किया है और फिर नाम पर फ़िल्टरिंग किया है। मेरे उद्देश्यों के लिए ठीक काम करता है।

7

प्रत्येक मैप किए गए इकाई के मैपर में सभी कॉलम परिभाषाओं के साथ columns विशेषता है। उदाहरण के लिए, आप एक कथात्मक वर्ग User आप के साथ User.__mapper__ साथ नक्शाकार और स्तंभों का उपयोग कर सकते हैं, तो:

list(User.__mapper__.columns) 

प्रत्येक स्तंभ name सहित कई गुण, (जो key नामित मैप की विशेषता के रूप में ही नहीं हो सकता है), nullable, unique और इतने पर ...

+0

यह metadata.tables ['mytable'] का निरीक्षण करने से अधिक आम तौर पर उपयोगी प्रतीत होता है। कॉलम, लेकिन ऐसा लगता है कि मुझे क्लास वेरिएबल को खोजने की अनुमति नहीं दी गई है जो वर्णनकर्ता को मेरी इकाई वर्ग में असाइन किया गया है, इसलिए मैं 'क्लास प्रॉपर्टी नामों को उनके मूल्यों में मैपिंग आउटपुट आउटपुट का उत्पादन करने की मूल समस्या के साथ छोड़ा गया है। –

1

एक InstrumentedAttribute उदाहरण एक एक विशेषता impl बुलाया अभ्यास एक ScalarAttributeImpl, एक ScalarObjectAttributeImpl, या एक CollectionAttributeImpl करती है।

मुझे यकीन नहीं है कि यह कितना भंगुर है, लेकिन मैं यह जांचता हूं कि यह निर्धारित करने के लिए कि कौन सा उदाहरण अंततः एक सूची या एक वस्तु को वापस करेगा या नहीं।

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