如何在Google App引擎上获取命名空间列表?

时间:2010-08-30 18:48:41

标签: google-app-engine

我想备份数据存储区中的所有用户数据。我的应用程序使用新的命名空间功能为每个用户提供多租户(根据文档中的示例)。

批量加载程序需要每个客户的命名空间才能下载数据。我没有保留用户列表,因此我无法生成名称空间。有没有检测所有当前使用的命名空间的方法?

4 个答案:

答案 0 :(得分:16)

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 :(得分:6)

现在还有一个get_namespaces()函数:

from google.appengine.ext.db import metadata

namespaces = metadata.get_namespaces() 

get_namespaces()返回Namespace个对象的列表。文档还指出“获取有关命名空间,种类和属性的信息的元数据查询通常执行起来很慢。”

答案 2 :(得分:4)

使用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()]

答案 3 :(得分:1)

没有API来获取命名空间列表。您必须记录您使用的记录。我特意使用了一个模型。