पायथन के लिए ऐप इंजन में, क्या ऑब्जेक्टिफाई (जावा लाइब्रेरी) जैसी कोई चीज है जहां मैं आसानी से एक वर्ग को दूसरे के भीतर एम्बेड कर सकता हूं और इसे डेटास्टोर में सहेज सकता हूं?

इस वर्ग को निम्न उदाहरण की तरह तैयार किया जाएगा जहां एक स्थान में स्थान वस्तु होती है। मैं इसे एक नेस्टेड ऑब्जेक्ट के रूप में जारी रखना चाहता हूं, साथ ही एम्बेडेड ऑब्जेक्ट में फ़ील्ड द्वारा क्वेरी करने में सक्षम होना चाहता हूं।

कक्षा स्थान ():
शहर = db.StringProperty()
राज्य = डीबी.स्ट्रिंगप्रॉपर्टी ()

कक्षा स्थल (db.मॉडल):
नाम = डीबी.स्ट्रिंगप्रॉपर्टी ()
स्थान = स्थान ()

जावा के लिए App Engine में Objectify में यह कैसे काम करता है, इसकी जानकारी यहां दी गई है।
http://code.google.com/p/objectify-appengine/ wiki/IntroductionToObjectify#@एम्बेडेड

क्या यह पायथन का उपयोग करना संभव है?

3
Sam Edwards 20 जुलाई 2011, 00:18

2 जवाब

सबसे बढ़िया उत्तर

फ़िलहाल नहीं, लेकिन NDB लाइब्रेरी एक दूसरे के भीतर मॉडल एम्बेड करने का समर्थन करता है या तो क्रमबद्ध करके उन्हें प्रोटोकॉल बफ़र्स के रूप में, या उनके गुणों को नेस्ट करके (ऑब्जेक्ट फ़ैशन)।

2
Nick Johnson 20 जुलाई 2011, 04:35
आपको धन्यवाद! यह परियोजना वह करने का प्रयास कर रही है जिसकी मुझे तलाश थी। "स्ट्रक्चर्डप्रॉपर्टी: एक संपत्ति जो आपको एक प्रकार के मॉडल को दूसरे के अंदर, मूल्य के अनुसार शामिल करने देती है" ऐसा प्रतीत होता है कि यह अभी भी शुरुआती चरणों में है और मैं पायथन रनटाइम के लिए नया हूं, इसलिए मैं शायद इसे समाप्त करने से पहले इसे परिपक्व होने दूंगा। यह, लेकिन मुझे यह जानकर खुशी हुई कि कोई व्यक्ति जो मैं चाहता हूं उसके लिए एक सुरुचिपूर्ण समाधान पर काम कर रहा हूं। उस प्रोजेक्ट के बारे में अधिक जानकारी यहां दी गई है: दस्तावेज़। google.com/document/d/…
 – 
Sam Edwards
20 जुलाई 2011, 17:32

संदर्भ गुणों का उपयोग करने पर विचार करें। अर्थात। एक स्थान वस्तु को अपनी इकाई के रूप में संग्रहीत करें और उस स्थान को संदर्भ द्वारा स्थान वस्तु में शामिल करें।

class Location():
  city = db.StringProperty()
  state = db.StringProperty()

class Venue(db.Model):
  name = db.StringProperty()
  location = db.ReferenceProperty(Location)

फिर, यदि आप एक ही समय में किसी स्थान और स्थान पर लेन-देन करना चाहते हैं, तो डेटास्टोर लेनदेन का उपयोग करें।

संपादित करें: 'निहित' ऑब्जेक्ट में फ़ील्ड पूछने के लिए, डेटास्टोर "बैक रेफरेंस" का उपयोग करें। अर्थात। तथ्य यह है कि वेन्यू में लोकेशन का संदर्भ होता है, इसका मतलब है कि लोकेशन में वेन्यू के संदर्भ भी शामिल हैं। देखें: http://code.google.com/appengine/docs /python/datastore/datamodeling.html#References

3
vsekhar 20 जुलाई 2011, 00:26
धन्यवाद @vsekhar, मैंने इसे माना, और यह उस कार्यक्षमता को प्राप्त करेगा जो मैं चाहता हूं, लेकिन इसमें डाउनसाइड्स हैं। 1. मुझे दो वस्तुओं के बीच संदर्भ बनाए रखना है। 2. मेरे पास डेटाबेस में दो ऑब्जेक्ट होंगे जहां तार्किक रूप से मुझे केवल एक की आवश्यकता होगी। 3. अगर वांछित है तो मैं "नाम" और "स्थान.नाम" दोनों से पूछताछ नहीं कर सका क्योंकि वे अलग-अलग इकाइयों में हैं। 4. यह मुझे नेस्टेड JSON संरचना को आसानी से क्रमबद्ध करने की अनुमति नहीं देगा जो मैं चाहता हूं। 5. मुझे पता है कि जावा ऐप इंजन में ऑब्जेक्टिफाई के साथ घोंसले के गुणों की यह अवधारणा संभव है (तार्किक रूप से कम से कम), इसलिए मुझे वह सादगी चाहिए।
 – 
Sam Edwards
20 जुलाई 2011, 17:24
2
मैं आपको दो बनाम एक वस्तु के ऊपरी भाग पर सुनता हूं। यदि आप संयुक्त क्वेरी करना चाहते हैं, तो आप स्थान की कुंजी देख सकते हैं और फिर "venue.name=ABC" और "venue.location=location_key" द्वारा स्थानों को क्वेरी कर सकते हैं। वेब-स्केल डेटाबेस के पीछे की पूरी अवधारणा डेटाबेस की तुलना में कोड में अधिक काम करना है। इसलिए कोई लागू रेफ़रेंशियल अखंडता, आदि। यह केवल एक डिज़ाइन विकल्प है जिसे उन्होंने स्केल के लिए बनाया है जो कुछ अनुप्रयोगों और प्रोग्रामिंग शैलियों को दूसरों की तुलना में बेहतर बनाता है।
 – 
vsekhar
21 जुलाई 2011, 05:17