2010-01-06 28 views
9

Tengo un modelo con una gran propiedad blob User.image Tener esta propiedad en mi modelo hizo que mis consultas tomaran demasiado tiempo y superaran la fecha límite, así que decidí mover esa propiedad a otro modelo - UserData - quien es el padre es el Usuario.Eliminar una propiedad de una instancia de modelo existente

Sin embargo, las instancias de modelos existentes que ya están en el almacén de datos aún contienen esos datos de imagen aunque la definición del Modelo ya no contenga esa propiedad.

¿Hay alguna manera de eliminar esos datos de las instancias de usuario?

Respuesta

12

La respuesta a su pregunta se documenta aquí: https://developers.google.com/appengine/articles/update_schema

copiar/pegar desde la sección "Extracción Suprimido Propiedades en el almacén de datos":

Si elimina una propiedad de su modelo , se encontrará que las entidades existentes todavía tienen la propiedad. Se mostrará en la consola admin y aún estará presente en el almacén de datos. Para limpiar realmente los datos antiguos , debe pasar por sus entidades a través de y eliminar los datos de cada uno.

  1. Asegúrese de haber eliminado las propiedades de la definición del modelo.
  2. Si su clase de modelo hereda de db.Model, cámbiela temporalmente a para heredar de db.Expando. (db.Model instancias no se pueden modificar dinámicamente, que es lo que necesitamos hacer en el siguiente paso.)
  3. Ciclo a través de las entidades existentes (como se describe anteriormente). Para cada entidad , utilice delattr para eliminar la propiedad obsoleta y guarde la entidad .
  4. Si su modelo se heredó originalmente de db.Model, no olvide para volver a cambiarlo después de actualizar todos los datos de .
+0

¿Cuál es el equivalente Java de 'delattr'? – Price

+0

Entendido - es 'Entity.removeProperty' – Price

0

No tengo los medios para probar esto ahora, pero trataría de establecer la propiedad de la imagen como nula o Ninguna (no estoy seguro si está usando Java o Python) mientras hago la transición a la clase UserData . Puede hacer esto en línea en su código como una forma de desaprobar la propiedad, o puede configurar un trabajo cron que haga esto de una vez. No estoy seguro de si hay una forma mejor de eliminar completamente la propiedad de la imagen de la entidad, pero esto al menos resolvería su problema de tiempo de carga.

Cuestiones relacionadas