2012-10-02 14 views
13

को साफ़ करने के लिए मुझे अपने कुछ मॉडल गुणों को हटाने की आवश्यकता है।
मैंने this link की जांच की लेकिन पहली समस्या यह है कि गुण polymodel पर हैं और गुणों को हटाने के लिए expando पर स्विच करने के लिए कोई रास्ता नहीं है, अगर मैं polymodel बदल सकता हूं तो क्या हो सकता है expando पर।मेरे ऐप में ndb गुणों को

तो मैं मौजूदा संस्थाओं से संपत्तियों को कैसे हटा सकता हूं?

मैं सभी StringPropertyNone पर सेट करने के लिए सोच रहा था और फिर मॉडल स्कीमा और पुन: नियोजन से हटा दें। उन गुणों में से एक BooleanProperty है, मैं इसे None पर सेट नहीं कर सकता ?! या ndb.PickleProperty ... मुझे इसे कैसे हटाया जाना चाहिए?

क्या कोई यह जानता है कि यह ठीक से कैसे किया जाए?

उत्तर

33

यदि आप अपनी सभी इकाइयों को अपडेट करना चाहते हैं तो अनुशंसित दृष्टिकोण एक नक्शा/नौकरी को कम करता है जो सभी संस्थाओं को पढ़ता है और फिर से लिखता है; हालांकि यह आपके लिए कितना डेटा है, इस पर निर्भर नहीं हो सकता है - नक्शा/कमी या तो मुक्त नहीं है।

यह भी सुनिश्चित करें कि आप डेटा का परीक्षण करें/डेटा के एक छोटे से सबसेट पर नौकरी कम करें। यह वास्तव में एक इकाई से संपत्ति को हटाने के लिए उल्लेखनीय सूक्ष्म है, भले ही यह मॉडल वर्ग में नहीं है! सबसे अच्छा तरीका हो सकता है:

if 'propname' in ent._properties: 
    del ent._properties['propname'] 
    ent.put() 
+0

thx guido! हां, मुझे इसका मूल्यांकन करना है कि वास्तव में इसके लायक है ... मेरे पास लगभग 100k इकाइयां हैं इसलिए स्कीमा से संपत्ति को निकालना ठीक हो सकता है। क्या होता है यदि मैं संपत्ति को हटा देता हूं, फिर से तैनात करता हूं और फिर इकाई को दोबारा दर्ज करता हूं? क्या यह उन गुणों को त्याग देगा या क्या मुझे अभी भी उन्हें ऑब्जेक्ट से निकालना होगा? – aschmid00

+6

स्कीमा परिवर्तन के बाद प्रतिष्ठा संपत्ति मूल्य को हटा नहीं देती है। (यह एक जानबूझकर विशेषता है जिसका उद्देश्य ऐप के दो संस्करणों के बीच अंतःक्रियाशीलता को अधिकतम करना है।) –

+0

जानना अच्छा है। – aschmid00

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