Как удалить все объекты во всех пространствах имен в GAE?

Google App Engine позволяет управлять хранилищем данных http://code.google.com/appengine/docs/adminconsole/datastoreadmin.html

но нет упоминания о пространствах имен, кроме пространства имен по умолчанию.

У меня много пространств имен, и теперь я хочу удалить все объекты/пространства имен в хранилище данных. Есть ли простой способ сделать это?


person rmflow    schedule 22.03.2011    source источник
comment
code.google.com/appengine/docs/adminconsole/ Конечно?   -  person Jakob Bowyer    schedule 22.03.2011
comment
@Jakob Bowyer: Конечно, что? Пространство имен по умолчанию?   -  person rmflow    schedule 22.03.2011
comment
Вам нужно сделать это только один раз?   -  person systempuntoout    schedule 22.03.2011
comment
@systempuntoout: Наверное, нет. Мне это нужно, пока я не закончу разработку своего приложения.   -  person rmflow    schedule 22.03.2011


Ответы (1)


Не уверен, что это можно назвать простым, но...

Вы можете использовать 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)
person Chris Farmiloe    schedule 22.03.2011
comment
Пакетное удаление улучшит время удаления. db.delete(keys) - person crizCraig; 29.09.2011