2010-08-30 17 views
12

Vorrei fare un backup di tutti i dati utente del datastore. La mia applicazione utilizza la nuova funzione namespace per fornire multi tenanting per utente (come nell'esempio nei documenti).Come posso ottenere un elenco di spazi dei nomi su App Engine di Google?

Il caricatore di massa ha bisogno dello spazio dei nomi per ogni cliente per scaricare i dati. Non tengo un elenco di utenti, quindi non posso generare gli spazi dei nomi. Esiste un metodo per rilevare tutti gli spazi dei nomi attualmente utilizzati?

risposta

15

Dal SDK 1.4.0 è possibile utilizzare Metadata Queries:

from google.appengine.ext.db import metadata 

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

Per NDB l'importazione è leggermente diversa:

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

Questo non è più sembra funzionare, e lancia un KindError; @ La risposta di "c roald" sotto è il modo attuale per raggiungere questo obiettivo. –

+1

Come sottolinea Brian, quando si utilizza NDB non è necessario chiamare .namespace_name poiché il nome stringa è il ritorno –

1

Non c'è API per ottenere un elenco di spazi dei nomi. Devi tenere un registro di quelli che usi. Io uso un modello appositamente per questo.

6

C'è anche ora un get_namespaces() funzione:

from google.appengine.ext.db import metadata 

namespaces = metadata.get_namespaces() 

get_namespaces() restituisce una lista di oggetti Namespace. I documenti notano anche che "le query sui metadati che recuperano informazioni su spazi dei nomi, tipi e proprietà sono generalmente lente da eseguire."

3

Utilizzando ndb

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

Utilizzando datastore

Per Datastore Metadata:

query = client.query(kind='__namespace__') 
query.keys_only() 
all_namespaces = [entity.key.id_or_name for entity in query.fetch()] 
Problemi correlati