2010-08-30 24 views
12

Me gustaría hacer una copia de seguridad de todos los datos de usuario en el almacén de datos. Mi aplicación está utilizando la nueva función de espacio de nombres para proporcionar varios inquilinos por usuario (como se muestra en el ejemplo de los documentos).¿Cómo obtengo una lista de espacios de nombres en el motor de la aplicación de Google?

El cargador a granel necesita el espacio de nombres para que cada cliente descargue los datos. No guardo una lista de usuarios, así que no puedo generar los espacios de nombres. ¿Hay algún método para detectar todos los espacios de nombres usados ​​actualmente?

Respuesta

15

Desde SDK 1.4.0 puede utilizar Metadata Queries:

from google.appengine.ext.db import metadata 

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

Para NDB la importación es ligeramente diferente:

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

Esto ya no parece funcionar, y lanza un KindError; La siguiente respuesta de "c roald" es la forma actual de lograr esto. –

+1

Como señala Brian, al usar NDB no hay necesidad de llamar a .namespace_name ya que el nombre de la cadena es el retorno –

1

No hay API para obtener una lista de espacios de nombres. Debe mantener un registro de los que usa. Yo uso un modelo específicamente para esto.

6

También hay ahora un get_namespaces (función):

from google.appengine.ext.db import metadata 

namespaces = metadata.get_namespaces() 

get_namespaces() devuelve una lista de objetos Namespace. Los documentos también señalan que "las consultas de metadatos que obtienen información sobre espacios de nombres, clases y propiedades generalmente son lentas de ejecutar".

3

Usando ndb

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

Usando datastore

por Datastore Metadata:

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