2012-10-02 10 views
13

w mojej aplikacji muszę usunąć kilka właściwości mojego modelu.
Wymeldowałem się this link ale pierwszym problemem jest to, że właściwości są na polymodel i nie ma możliwości zamiany przejść na expando na czas, aby usunąć właściwości, im nawet nie shure co się stanie, jeśli zmienię polymodel do expando.jak czyściutko usunąć właściwości ndb

Jak więc usunąć właściwości z istniejących obiektów?

Myślałem, aby ustawić wszystkie StringProperty na None, a następnie usunąć je ze schematu modelu i ponownie wdrożyć. jedną z tych właściwości jest BooleanProperty, nie mogę ustawić tego na None w prawo ?! lub ndb.PickleProperty ... jak mam to usunąć?

Czy ktoś wie, jak zrobić to poprawnie?

Odpowiedz

33

Jeśli chcesz zaktualizować wszystkie swoje jednostki, zalecane podejście to mapowanie/redukcja zadania, które odczytuje i przepisuje wszystkie jednostki; jednak może nie być tego warte, w zależności od tego, ile masz danych - mapa/redukcja też nie jest wolna.

Upewnij się także, że testujesz mapę/redukujesz zadanie w małym podzbiorze danych. To naprawdę subtelne, aby naprawdę usunąć własność z bytu, nawet jeśli nie jest już w klasie modelu! Najlepszym rozwiązaniem może być:

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

thx guido! tak muszę ocenić, czy rzeczywiście jest ... mam około 100k podmiotów, więc może być nawet OK, aby usunąć właściwość ze schematu. co się stanie, jeśli usunę właściwość, przeprojektuję ją, a następnie oceniam jej podmiot? czy to odrzuciłoby te właściwości, czy też nadal musiałbym je usunąć z obiektu? – aschmid00

+6

Reputacja po zmianie schematu nie powoduje usunięcia wartości właściwości. (Jest to celowa funkcja mająca na celu maksymalizację współdziałania między dwiema wersjami aplikacji.) –

+0

Dobrze wiedzieć. – aschmid00

Powiązane problemy