2010-08-30 10 views
12

मैं डेटास्टोर में सभी उपयोगकर्ता डेटा का बैकअप बनाना चाहता हूं। मेरा आवेदन प्रति उपयोगकर्ता आधार पर बहु ​​किरायेदारी प्रदान करने के लिए नई नामस्थान सुविधा का उपयोग कर रहा है (दस्तावेज़ों में उदाहरण के अनुसार)।मैं Google ऐप इंजन पर नेमस्पेस की सूची कैसे प्राप्त करूं?

थोक लोडर को प्रत्येक ग्राहक के लिए डेटा डाउनलोड करने के लिए नामस्थान की आवश्यकता होती है। मैं उपयोगकर्ताओं की एक सूची नहीं रखता, इसलिए मैं नामस्थान उत्पन्न नहीं कर सकता। क्या वर्तमान में उपयोग किए गए सभी नामों का पता लगाने का कोई तरीका है?

उत्तर

15

SDK 1.4.0 जब से तुम Metadata Queries उपयोग कर सकते हैं:

from google.appengine.ext.db import metadata 

for ns in metadata.get_namespaces(): 
    print "namespace: '%s'" % ns.namespace_name 

NDB के लिए आयात थोड़ा अलग है:

from google.appengine.ext.ndb import metadata 
+1

यह नहीं रह गया है काम करने के लिए प्रकट होता है, और एक KindError फेंकता है; @ "सी roald" का जवाब नीचे प्राप्त करने का वर्तमान तरीका है। –

+1

ब्रायन बताते हैं, एनडीबी का उपयोग करते समय .namespace_name को कॉल करने की आवश्यकता नहीं है क्योंकि स्ट्रिंग नाम वापसी है –

1

नामस्थानों की सूची प्राप्त करने के लिए कोई एपीआई नहीं है। आपको अपने द्वारा उपयोग किए जाने वाले लोगों का रिकॉर्ड रखना होगा। मैं विशेष रूप से इसके लिए एक मॉडल का उपयोग करता हूं।

6

वहाँ भी अब एक get_namespaces है() फ़ंक्शन:

from google.appengine.ext.db import metadata 

namespaces = metadata.get_namespaces() 

get_namespaces() Namespace ऑब्जेक्ट्स की एक सूची देता है। दस्तावेज़ों में यह भी ध्यान दिया गया है कि "मेटाडेटा क्वेरीज जो नामस्थान, प्रकार और गुणों पर जानकारी प्राप्त करती हैं, आम तौर पर निष्पादित करने में धीमी होती हैं।"

3

का उपयोग ndb

from google.appengine.ext.ndb import metadata 
all_namespaces = [ns for ns in metadata.get_namespaces()] 

का उपयोग datastore

प्रति Datastore Metadata:

query = client.query(kind='__namespace__') 
query.keys_only() 
all_namespaces = [entity.key.id_or_name for entity in query.fetch()] 
संबंधित मुद्दे