开发者

How do I get a list of namespaces on google app engine?

I would like to make a backup of all user data in the datastore. My application is using the new nam开发者_JAVA百科espace feature to provide multi tenanting on a per user basis (as per the example in the docs).

The bulk loader needs the namespace for each customer to download the data. I don't keep a list of users, so I can't generate the namespaces. Is there a method of detecting all the currently used namespaces?


Since SDK 1.4.0 you can use Metadata Queries:

from google.appengine.ext.db import metadata

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

For NDB the import is slightly different:

from google.appengine.ext.ndb import metadata


There is also now a get_namespaces() function:

from google.appengine.ext.db import metadata

namespaces = metadata.get_namespaces() 

get_namespaces() returns a list of Namespace objects. The docs also note that "metadata queries that fetch information on namespaces, kinds, and properties are generally slow to execute."


Using ndb

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

Using datastore

Per Datastore Metadata:

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


There's no API to get a list of namespaces. You must keep a record of the ones you use. I use a model specifically for this.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜