Как удалить db.BlobProperty из многих объектов? - PullRequest
1 голос
/ 10 сентября 2011

У меня есть сохраненные данные, которые не нужны, и поэтому я хочу их очистить. Я мог бы мигрировать из хранилища данных в хранилище BLOB-объектов, и поэтому по крайней мере поле small=db.BlobProperty(default=None) является избыточным, поэтому я хотел бы удалить его, а также удалить его из сущностей, находящихся в хранилище данных, поскольку переменная с именем «full» уже имеет образ origianl и переменная с именем small - это изменение размера, которое я могу получить из хранилища больших двоичных объектов, или, если изображение еще не перенесено, я могу изменить размер свойства «full» в памяти и, следовательно, удалить дублирующиеся и избыточные данные.

Но как мне удалить свойство из хранимых объектов? Я хотел бы сохранить этот класс и переместить свойства blob в хранилище BLOB-объектов, а затем удалить свойства blob, поэтому я полагаю, что мне нужно написать скрипт 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('.')

Как удалить его вместо того, чтобы просто установить его на None?

1 Ответ

1 голос
/ 10 сентября 2011

Я бы пошел с Mapreduce API , который должен быть лучшим инструментом для работы в этом случае *:

1. Зарегистрируйте маппер
2 Обновить сущности

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

* В случае, если количество сущностей не так велико, вы можете просто перебрать каждую сущность с помощью простого скрипта Python

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...