Я знаю, о чем вы думаете: «О, это не так!», Но здесь мы с тех пор, как Google еще не предоставил более простой метод.Опорожнение хранилища данных в GAE
Я использую решение очереди на основе, которая работала отлично:
импорт DateTime из моделей импорта *
DELETABLE_MODELS = [Alpha, Beta, AlphaBeta]
def initiate_purge():
for e in config.DELETABLE_MODELS:
deferred.defer(delete_entities, e, 'purging', _queue = 'purging')
class NotEmptyException(Exception): pass
def delete_entities(e, queue):
try:
q = e.all(keys_only=True)
db.delete(q.fetch(200))
ct = q.count(1)
if ct > 0:
raise NotEmptyException('there are still entities to be deleted')
else:
logging.info('processing %s completed' % queue)
except Exception, err:
deferred.defer(delete_entities, e, then, queue, _queue = queue)
logging.info('processing %s deferred: %s' % (queue, err))
Все это делает очередь запроса на удаление некоторых данных (один раз для каждого класса), а затем, если процесс с очередью либо не работает, либо знает, что есть еще что-то, что нужно удалить, оно переупорядочивает себя.
Это бьет из-за удара обновления в браузере в течение 10 минут.
Тем не менее, у меня возникли проблемы с удалением объектов AlphaBeta, в конце концов осталось несколько левых. Я думаю, потому что он содержит Эталонные свойства:
class AlphaBeta(db.Model):
alpha = db.ReferenceProperty(Alpha, required=True, collection_name='betas')
beta = db.ReferenceProperty(Beta, required=True, collection_name='alphas')
Я попытался удалить индексы, относящиеся к этим типам сущностей, но это не имеет никакого значения.
Любой совет будет оценен, пожалуйста.
- это "delete_entities_before" опечатка? Возможно, вы пытаетесь отложить вызов функции, которая не существует? – geoffspear
Да, это было, спасибо. Это то, что происходит, когда вы упрощаете код. – user132262
Правда ли, что AlphaBeta действительно означает EntityOrigin? –