2011-06-05 13 views
8

मैं Model.get_by_key_name() बनाम Model.get_by_id()gae मॉडल get_by_id() बनाम get_by_key_name()

उदाहरण के लिए, मान लीजिए कि मैं कुछ JSON कि प्रदर्शित करने के लिए इस्तेमाल किया जाएगा लौट रहा जाने का उपयोग कर रिकॉर्ड प्राप्त करने में कठिनाई के बारे में सोच रहा हूँ रिकॉर्ड की एक तालिका, और प्रत्येक रिकॉर्ड के लिए, उस रिकॉर्ड को हटाने के लिए एक बटन है। मान लीजिए मेरे पास मॉडल 'फू' और मॉडल इंस्टेंस 'फू' है।

मेरा मानना ​​है कि मैं उचित रिकॉर्ड के साथ प्रत्येक बटन का उपयोग कर या तो संबद्ध कर सकते हैं:

str(foo.key()) #suppose it eval's to "axhYm92ZZXJvY2tyDgsSCENhnb3J5GBQM" 

या

foo.key().id() #suppose it eval's to "57" 

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

अनुरोध तो में या तो परिणाम होगा:

Foo.get_by_key_name("axhYm92ZZXJvY2tyDgsSCENhnb3J5GBQM").delete() 

या

Foo.get_by_id(57).delete() 

अब, अनिर्णय-छलनी एडीएचडी प्रोग्रामर कि मैं कर रहा हूँ जा रहा है, मुझे पता है की जरूरत है ... जो है "सही रास्ता? वे दोनों काम करने लगते हैं, लेकिन क्या ऐसी परिस्थितियां हैं जो एक को दूसरे के लिए बेहतर बनाती हैं? क्या 'कुंजी' तरीके बनाम 'आईडी' तरीके का उपयोग करने के लिए कुछ फायदा है?

उत्तर

11

आप स्ट्रिंग कुंजी के साथ एक कुंजी नाम भ्रमित कर रहे हैं। वे अलग हैं। एक कुंजी का नाम ऐसा कुछ है जिसे आप आरक्षित कुंजी_नाम संपत्ति के निर्माण समय पर एक इकाई देते हैं। यदि आप नहीं करते हैं, तो सिस्टम एक आईडी उत्पन्न करेगा। एक इकाई कुंजी के पास या तो नाम या आईडी हो सकती है, लेकिन दोनों नहीं।

यदि आपने जानबूझकर कुंजी को स्ट्रिंग किया है, तो आप उसे मुख्य कन्स्ट्रक्टर पर वापस भेजकर इसका पुनर्गठन करते हैं।

stringifiedKey = str(key) 
reconstitutedKey = db.Key(stringifiedKey) 

मान लीजिए कि आप वास्तव में नाम बनाम आईडी का मतलब है, यह किसी भी चीज का अधिक सुविधाजनक है। कोई प्रदर्शन अंतर माइक्रोस्कोप होने जा रहा है।

2

जो भी हो रहा है वह एक महत्वपूर्ण स्ट्रिंग है जो key_name नहीं है। यदि आप इसकी कुंजी स्ट्रिंग से ऑब्जेक्ट प्राप्त करना चाहते हैं। फिर आप Model.get(keystring) का उपयोग करते हैं। Key_name वह है जिसे आप किसी ऑब्जेक्ट को असाइन करते हैं जिसे अद्वितीय माना जाता है। अगर आपको लगता है कि आप किसी भी विशेषता का उपयोग कर सकते हैं जो अद्वितीय है तो आप इसे एक key_name के रूप में बना सकते हैं और डिफ़ॉल्ट जेनरेट आईडी के लिए जा सकते हैं। एक key_name का उपयोग करने में केवल एक चीज है जो get_or_insert() है जो एक इकाई लौटाती है यदि उस कुंजी नाम वाली इकाई मौजूद है और यह एक बनाता है।

+0

असल में यह 'मॉडल.get (डीबी.के (कीस्ट्रिंग) होना चाहिए)' सही? –

+0

कोई नहीं मिलता है() keystring से एक इकाई भी प्राप्त कर सकता है Model.get (keystring) –

+0

ओह सच में? मैंने प्रलेखन की जांच की और इसका कोई उल्लेख नहीं मिला, लेकिन यह जानना अच्छा है। धन्यवाद। –

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