Как да изтрия всички обекти във всички пространства от имена в GAE?

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

но не се споменават пространства от имена, освен пространство от имена по подразбиране.

Имам много пространства от имена и сега искам да изтрия всички обекти/пространства от имена в Datastore. Има ли лесен начин да го направите?


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)


Не съм сигурен дали това би се класирало за просто, но...

Можете да използвате 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