2012-04-05 8 views
8

मैं डेटास्टोर द्वारा निर्दिष्ट आईडी का उपयोग करके कुंजी द्वारा एक इकाई को लोड करने का प्रयास कर रहा हूं लेकिन मुझे ऐसा करने के लिए कोई एपीआई विधि नहीं दिख रही है (एनडीबी का उपयोग करके)। मैंने सोचा कि मैं एक पूर्णांक आईडी से कुंजी बनाने में सक्षम हूं और इकाई लोड करने के लिए key.get() का उपयोग कर सकता हूं, लेकिन मुझे सिर्फ एक आईडी से कुंजी बनाने का कोई तरीका नहीं दिख रहा है। मुझे संदेह है कि मैं यहां कुछ स्पष्ट याद कर रहा हूं। मुझे एक इकाई को कैसे लोड करना चाहिए जहां मुझे केवल इसकी आईडी पता है?ऐप इंजन एनडीबी - आईडी का उपयोग करके कुंजी द्वारा इकाई को कैसे लोड करें?

उत्तर

23

YourModel.get_by_id() आईडी द्वारा मॉडल उदाहरण प्राप्त करता है।

यहाँ

डॉक्स:
https://developers.google.com/appengine/docs/python/ndb/modelclass#Model_get_by_id

नहीं लगता है कि तुम तरह जानने के बिना आईडी के आधार पर एक इकाई नहीं मिल सकता है क्योंकि अलग अलग मॉडल वर्गों के उदाहरण एक ही आईडी हो सकता है/KEY_NAME

+0

धन्यवाद, यह वही है जो मैं ढूंढ रहा था। निश्चित नहीं है कि मैंने दस्तावेज़ों में इसे कैसे याद किया। – user605331

+2

मुझे लगता है कि दस्तावेज़ गलत हैं, मैं इसे मेरे जीवन के लिए काम नहीं कर सका, लेकिन फिर मैंने देखा कि मैं एक स्ट्र में गुजर रहा था ताकि लंबी आईडी को चाल में घुमाया जा सके, हालांकि दस्तावेज़ आपको ले जाते हैं मान लीजिए कि आप एक स्ट्र का उपयोग कर सकते हैं जो कम से कम स्थानीय देव ऐप सर्वर ऐप इंजन संस्करण 1.8.9 पर सही नहीं है। एक बार जब मैंने int (id_str) किया तो यह ठीक काम करता था। – Shaun

+1

@ शुन मुझे नहीं लगता कि दस्तावेज़ गलत हैं। यदि आपकी आईडी एक 'int' है तो आपको' int' में गुजरना होगा और यदि यह 'str' है तो उसे' str' होना चाहिए। – aschmid00

22

एक और रास्ता: ndb.Key(YourModel, id).get()

0

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

मामलों में जहां केवल किसी खास मॉडल के लिए कुंजी के एक तरह (लगभग है जो हर मॉडल) है, मुझे लगता है कि कुंजी है, जो अर्थ स्पष्टता का एक सा कहते हैं पैदा करने के लिए एक वर्ग विधि बनाना चाहते में

तो :

class Book(ndb.Model): 
    title = ndb.StringProperty() 
    pages = ndb.IntegerProperty() 
    @classmethod 
    def make_key(cls, isbn): 
    return ndb.Key(cls, isbn) 

b = Book.make_key('1234-5678').get() 

निश्चित रूप से जोड़ा गया कोड कड़ाई से जरूरी नहीं है, लेकिन यह स्पष्टता जोड़ता है और मेरे मॉडल को अधिक दीर्घकालिक बनाए रखने योग्य बनाता है।

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