2012-10-02 3 views
13

내 응용 프로그램에서 몇 가지 내 모델 속성을 제거해야합니다.
내가 밖으로 this link 확인하지만 첫 번째 문제는 속성이 polymodel에 있고 나는 polymodel을 변경하면 무슨 일이 일어날 속성을 제거 할 수있는 시간에 대한 expando에, 메신저도 SHURE하지 전환가는 방법 메신저가 없다는 것입니다 expando으로ndb 속성을 깨끗하게 제거하는 방법

기존 엔티티에서 속성을 제거하려면 어떻게해야합니까?

StringPropertyNone으로 설정하고 모델 스키마에서 제거하고 다시 배포하는 것이 좋습니다. 해당 속성 중 하나가 BooleanProperty인데이 값을 None으로 설정할 수 없습니다. 또는 ndb.PickleProperty ... 어떻게 제거해야합니까?

이 작업을 제대로 수행하는 방법을 아는 사람이 있습니까?

답변

33

모든 엔티티를 업데이트하려면 모든 엔티티를 읽고 다시 쓰는지도/축소 작업이 좋습니다. 그러나 얼마나 많은 데이터를 가지고 있느냐에 따라 그럴 가치가 없을 수도 있습니다.지도/축소는 무료가 아닙니다.

지도/축소 작업을 데이터의 작은 하위 집합에서 테스트해야합니다. 더 이상 모델 클래스에 없더라도 엔티티에서 속성을 완전히 제거하는 것이 현저히 미묘합니다! 가장 좋은 방법은 다음과 같습니다.

if 'propname' in ent._properties: 
    del ent._properties['propname'] 
    ent.put() 
+0

thx guido! 네, 그 사실 가치가 있는지 평가할 필요가 ... 나는 약 100k 엔티티가 있으므로 스키마에서 속성을 제거하는 것이 좋습니다. 속성을 제거하고 재배포 한 다음 엔터티를 평가하면 어떻게됩니까? 이 속성을 버리거나 개체에서 제거해야합니까? – aschmid00

+6

스키마 변경 후 Reputting이 속성 값을 제거하지 않습니다. (이것은 두 버전의 앱 간의 상호 운용성을 극대화하기위한 의도적 인 기능입니다.) –

+0

잘 알고 있습니다. – aschmid00

관련 문제