Robert,

Are you sure that this is going to work? In GAE there is a significant
difference between a property not being set/not existing at all and
being set to null/None.

Erwin

On 5 apr, 08:27, Robert Kluin <[email protected]> wrote:
> Hey Greg,
>   Assuming you are deleting the property definition from the Model,
> then I think you can also use:
>
>      your_entity._entity.pop('property_to_delete', None)
>
>   It is shorter, and probably a little clearer.
>
> Robert
>
>
>
> On Tue, Apr 5, 2011 at 00:17, Greg <[email protected]> wrote:
> > I've stumbled across what looks like a neat way to remove obsolete
> > properties from entities, without having to switch models to Expando
> > and back again. I convert the entity to a protocol buffer, which
> > reveals the obsolete properties. Then I remove them, convert back to
> > an entity and save it.
>
> > So far my testing has shown this doesn't have any ill effects, but I'd
> > like feedback in case what I'm doing is dangerous. In particular, I
> > don't understand what would happen to the indexes for the removed
> > properties - how does the datastore handle these?
>
> > Cheers
> > Greg.
>
> > # !!! EXPERIMENTAL CODE !!!
> > # !!! USE ENTIRELY AT YOUR OWN RISK !!!
> > # !!! NOT ENDORSED BY GOOGLE (YET) !!!
>
> > from google.appengine.ext import db
>
> > def remove_stale_properties(e):
> >        current_properties=e.properties().keys()
> >        epb=db.model_to_protobuf(e)
> >        for i in reversed(range(len(epb.property_))):
> >                if epb.property_[i].name() not in current_properties:
> >                        logging.info('Deleting property %s:%s'%
> > (epb.property_[i].name(),epb.property_[i].value()))
> >                        del epb.property_[i]
> >        for i in reversed(range(len(epb.raw_property_))):
> >                if epb.raw_property_[i].name() not in current_properties:
> >                        logging.info('Deleting raw property %s:%s'%
> > (epb.raw_property_[i].name(),epb.raw_property_[i].value()))
> >                        del epb.raw_property_[i]
> >        return db.model_from_protobuf(epb)
>
> > # Example usage
>
> > entity_list=Foo.all().fetch(1000)
> > for entity in entity_list:
> >        entity=remove_stale_properties(entity)
> > db.put(entity_list)
>
> > --
> > You received this message because you are subscribed to the Google Groups 
> > "Google App Engine" group.
> > To post to this group, send email to [email protected].
> > To unsubscribe from this group, send email to 
> > [email protected].
> > For more options, visit this group 
> > athttp://groups.google.com/group/google-appengine?hl=en.- Tekst uit 
> > oorspronkelijk bericht niet weergeven -
>
> - Tekst uit oorspronkelijk bericht weergeven -

-- 
You received this message because you are subscribed to the Google Groups 
"Google App Engine" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en.

Reply via email to