2011-09-10 11 views
1

私は不要なデータを保存していますので、そのデータを消去したいのです。私はデータストアからブロブストアに移行することができます。したがって少なくともフィールドsmall=db.BlobProperty(default=None)は冗長ですので、削除して、データストア内のエンティティから削除したい場合は、 "full"という変数がすでにorigianlイメージと変数 "small"は、ブロブストアから取得できるリサイズです。イメージがまだマイグレーションされていない場合は、メモリ内の "full"プロパティのサイズを変更して、重複したデータを削除することができます。多くのエンティティからdb.BlobPropertyを削除するにはどうすればよいですか?

しかし、保存されたエンティティからプロパティを削除するにはどうすればよいですか?私はこのクラスを維持し、blobpropertiesをblobstoreに移動してblobpropertiesを削除したいので、エンティティを反復し、変数smallをNoneに設定し、または変数smallをすべてから削除するPythonスクリプトを作成する必要があると思いますエンティティ。あなたはそれを行う方法をアドバイスできますか?

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

私はこの場合*に仕事に最適なツールである必要がありMapreduce apiとなるだろう:

1。マッパーの登録
2。エンティティの数はそれほど大きくはない*場合には実体

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

を更新し、あなたは、単にシンプルなPythonスクリプトで各エンティティ上で答えを

+0

感謝を繰り返すことができます。私は大きな仕事に使うことができると聞いて以来、私はmapreduceを見ていました。 *これは約10000個のエンティティなので、簡単な修正で簡単な繰り返しを実行できます。 –

+0

更新:mapreduceを使用しました。 'small'という変数はすべてnullに設定されました。変数が完全に削除される可能性があると思いますが、現在はどこでもnull値があります。 –

+1

完全に削除するには、新しいスキーマを持つすべてのエンティティを再作成し、古いスキーマを削除する必要があります。古いプロパティがnullに設定されていることは、gae-datastoreのようなスキーマレスデータストアの一般的なシナリオです。 – systempuntoout

関連する問題