나는 '다시는 그렇지 않습니다!'라고 생각하는 것을 알고 있지만 Google은 아직 간단한 방법을 제공하지 않았기 때문에 여기 있습니다.GAE에서 데이터 저장소 비우기
나는 괜찮 았는데 큐 기반 솔루션을 사용하고 있습니다 : 모델에서
수입 날짜 가져 *을
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을 실제로 사용한다는 것은 사실입니까? –