如何从许多实体中删除db.BlobProperty?

时间:2011-09-10 18:28:43

标签: python google-app-engine google-cloud-datastore blob

我已经存储了不需要的数据,因此我想要清理它。我可以从数据存储区迁移到blobstore,因此至少字段small=db.BlobProperty(default=None)是多余的,所以我想删除它并将其从数据存储区中的实体中删除,因为名为“full”的变量已经具有origianl图像和名为“small”的变量是我可以从blobstore获取的调整大小,或者如果图像尚未迁移,我可以在内存中调整属性“full”,从而删除重复和冗余数据。

但是如何从存储的实体中删除属性?我想保留这个类并将blobproperties移动到blobstore然后删除blobproperties所以我想我必须编写一个迭代实体的python脚本并将变量small设置为None和/或删除变量所有实体都命名为small。你能建议怎么做吗?

class Image(db.Model):#migrate to blobstore
 reference=db.ReferenceProperty(A,collection_name='matched_images',verbose_name="Title")
 primary_image = blobstore.BlobReferenceProperty() 
 title=db.StringProperty(multiline=True,verbose_name="Title")
 avatar=db.BlobProperty(default=None)
 text=db.TextProperty(default=None) 
 name=db.StringProperty(default=None)
 email=db.EmailProperty(indexed=False,verbose_name="Email")
 name=db.StringProperty()
 desc=db.StringProperty()
 owner=db.UserProperty()
 secret=db.StringProperty()
 full=db.BlobProperty(default=None)
 full_ext=db.StringProperty()
 small=db.BlobProperty(default=None)
 small_ext=db.StringProperty()

以下情况会怎么样?

# will DELETE the small property use /deletemodels?force=true
class DeleteSmallProperties(webapp.RequestHandler):
    def get(self):

    def dMsg(msg):
      self.response.out.write(msg + '\n')
    n = self.request.get('force')
    if n:
      dMsg('clearing Image.small data....')
      for uc in Image.all():
               uc.small = None #(?)
               uc.save() #or us.put()?
               dMsg('.')

如何删除它而不是仅将其设置为无?

1 个答案:

答案 0 :(得分:1)

在这种情况下,我会选择Mapreduce api作为工作的最佳工具 *

1。注册映射器
2。更新实体

from mapreduce import operation as op  
def process(entity):
    entity.small = None
    yield op.db.Put(entity)  

*如果实体数量不是那么大,你可以简单地用一个简单的python脚本迭代每个实体