【问题标题】:How to delete a db.BlobProperty from many entities?如何从许多实体中删除 db.BlobProperty?
【发布时间】:2011-11-14 11:34:47
【问题描述】:

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

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

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('.')

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    * 如果实体的数量不是很大,您可以使用简单的 python 脚本简单地迭代每个实体

    【讨论】:

    • 感谢您的回答。我只是在看 mapreduce,因为我听说它可以用于更大的工作。 * 它大约有 10000 个实体,因此快速修复可能是运行简单的迭代。
    • 更新:我使用了 mapreduce 并且它有效。现在所有名为 small 的变量都设置为 null。我想有可能完全删除该变量,而它现在到处都有空值。
    • 要完全删除它,您必须使用新架构重新创建每个实体,并删除旧架构。将旧属性设置为 null 是无模式数据存储(如 gae-datastore)中的常见场景。
    • 感谢您提供的信息。在实践中,我现在已经能够将数据存储从 4 GB 缩小到 1 GB,而没有真正的损失。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-02
    • 1970-01-01
    • 1970-01-01
    • 2018-02-25
    • 1970-01-01
    • 2021-12-20
    • 1970-01-01
    相关资源
    最近更新 更多