2010-01-06 8 views
9

큰 blob 속성이있는 모델이 있습니다. User.image 내 모델에서이 속성을 사용하면 쿼리에 너무 많은 시간이 소요되고 마감일을 지나치게되어 그 속성을 다른 모델 - UserData - 부모는 사용자입니다.기존 모델 인스턴스에서 속성 제거

그러나 모델 정의에 더 이상 해당 속성이 없더라도 이미 데이터 저장소에있는 기존 모델 인스턴스에는 여전히 해당 이미지 데이터가 포함되어 있습니다.

사용자 인스턴스에서 해당 데이터를 삭제하는 방법이 있습니까?

답변

12

귀하의 질문에 대한 대답은 여기에 설명되어 있습니다 :

당신은 당신이 당신의 모델에서 속성을 제거 경우 : "데이터 스토어에서 삭제 된 속성을 제거"섹션에서 https://developers.google.com/appengine/articles/update_schema

복사/붙여 넣기 기존 엔티티에 여전히 속성이 있음을 알 수 있습니다. 그것도 여전히 콘솔 콘솔에 표시됩니다 여전히 데이터 저장소에 에 존재합니다. 이전 데이터를 완전히 제거하려면 엔티티를 순환하고 각각 에서 데이터를 제거해야합니다.

  1. 모델 정의에서 속성을 제거했는지 확인하십시오.
  2. 모델 클래스가 db.Model에서 상속하는 경우 으로 일시적으로 전환하여 db.Expando에서 상속받습니다. (db.Model 인스턴스는 동적으로 을 수정할 수 없습니다. 다음 단계에서는 해야합니다.)
  3. (위에서 설명한 것처럼) 기존 엔티티를 순환합니다. 엔티티 각각에 대해 delattr을 사용하여 사용하지 않는 속성을 삭제 한 다음 엔티티를 저장하십시오.
  4. 원래 모델이 db.Model에서 상속 된 경우 데이터를 모두 업데이트 한 후 다시 변경하려면 을 잊지 마세요.
+0

'delattr'과 동일한 Java는 무엇입니까? – Price

+0

알았습니다. 'Entity.removeProperty'입니다. – Price

0

지금은 이것을 테스트 할 방법이 없지만 UserData 클래스로 전환하는 동안 이미지 속성을 null 또는 None (Java 또는 Python을 사용하고 있는지 확실하지 않음)으로 설정하려고합니다. . 속성을 비난하는 방식으로 코드에서이 작업을 인라인으로 수행하거나이 작업을 한꺼번에 수행 할 수 있습니다. 엔티티에서 이미지 속성을 완전히 제거하는 더 좋은 방법이 있는지 확실하지 않지만 적어도로드하는 시간 문제를 해결할 수는 있습니다.