如何删除GAE中所有命名空间的所有实体?

1 投票
1 回答
1482 浏览
提问于 2025-04-16 14:11

Google App Engine 让你可以管理 Datastore(数据存储),你可以在这里找到相关的管理控制台:http://code.google.com/appengine/docs/adminconsole/datastoreadmin.html

不过,除了默认的命名空间外,那里没有提到其他命名空间的内容。

我有很多命名空间,现在我想删除 Datastore 中的所有实体和命名空间。有没有简单的方法可以做到这一点呢?

1 个回答

7

不确定这是否算简单,不过...

你可以使用mapper api来创建一些函数,这些函数可以遍历整个集合,同时你可以通过db.GqlQuery("SELECT * FROM __namespace__")来获取所有使用的命名空间。

假设你有一个用于遍历所有实体的函数像这个,叫做each()。你可以在任务中或者在本地使用启用了remote_api的控制台来运行以下代码,以删除所有内容。

for namespace in each(db.GqlQuery("SELECT * FROM __namespace__")):
    # set the namespace
    namespace_manager.set_namespace( namespace.namespace_name )
    # get all the kinds used in this namespace
    for kind in each(db.GqlQuery("SELECT * FROM __kind__")):
        # get entity 'keys only'
        for key in each(db.GqlQuery("SELECT __key__ FROM %s" % kind.kind_name)):
            db.delete(key)

撰写回答