2012-10-02 1 views
13

nella mia app ho bisogno di rimuovere alcune proprietà dei miei modelli.
this link ho verificato il this link ma il primo problema è che le proprietà sono su un polymodel e non c'è modo di passare a un per il tempo di rimuovere le proprietà, im nemmeno shure cosa potrebbe accadere se cambio un polymodel a expando.come rimuovere in modo pulito le proprietà ndb

così come faccio a rimuovere le proprietà da entità esistenti?

stavo pensando di impostare tutto StringProperty su None e quindi rimuoverlo dallo schema del modello e ridistribuirlo. una di queste proprietà è una BooleanProperty, non posso impostare questa su None giusto ?! o ndb.PickleProperty ... come dovrei rimuoverlo?

qualcuno sa come farlo correttamente?

risposta

33

Se si desidera aggiornare tutte le entità, l'approccio consigliato è una mappa/riduzione del lavoro che legge e riscrive tutte le entità; tuttavia, potrebbe non valerne la pena, a seconda di quanti dati hai - la mappa/riduzione non è libera neanche.

Assicurarsi inoltre di testare la mappa/ridurre il lavoro su un piccolo sottoinsieme di dati. È estremamente sottile rimuovere veramente una proprietà da un'entità, anche se non è più nella classe del modello! L'approccio migliore potrebbe essere:

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

thx guido! sì, devo valutare se vale la pena ... ho circa 100k entità quindi potrebbe anche essere ok rimuovere la proprietà dallo schema. cosa succede se rimuovo la proprietà, ridistribuisci e poi reputalo? questo avrebbe scartato quelle proprietà o avrei ancora bisogno di rimuoverle dall'oggetto? – aschmid00

+6

La ripetizione dopo la modifica dello schema non rimuove il valore della proprietà. (Questa è una funzione intenzionale intesa a massimizzare l'interoperabilità tra due versioni di un'app). –

+0

ok, buono a sapersi. – aschmid00