2015-08-17 3 views
-1

Я хочу преобразовать некоторые объекты в новые имена. Как я могу запросить объекты, не имеющие определенного класса модели.Как я могу запросить объекты Google App Engine по имени для преобразования в новые имена?

Например, у меня есть такое юридическое лицо (она упрощена, чтобы быть более удобным для чтения):

class Some(ndb.model): 
    name = ndb.StringProperty() 

Я хочу, чтобы переименовать его:

class SomeFile(ndb.model): 
    name = ndb.StringProperty() 

Как я могу это сделать?

Если будет переименован Some в SomeFile, то не будет Some для запроса, а только данные в хранилище данных.

ответ

0

Может быть, я не понимаю ваш вопрос, но это то, что вы хотите ?:

for x in Some.query(): 
    y = SomeFile() 
    y.name = x.name 
    y.put() 
    x.key.delete() 

Хотя вы должны сделать это более эффективным, делая это в партиях.

+0

Я не могу работать, вы предполагаете, что класс Некоторой части существующий, но будете заменить и некоторые будут удалять, так как мертвый код. Я не могу поддерживать мертвый код, так как он блокирует разработку. – Chameleon

+0

Я не понимаю ваш комментарий ... Если 'class Some()' не существует, просто создайте его как Expando, поэтому вам не нужно перечислять свойства. После преобразования вы удаляете это тривиальное определение 'class Some()', поэтому вы не поддерживаете мертвый код. –

+0

Это просто не может быть Некоторый (ndb.Model), так как этот код должен быть удалён после обновления, не сохраняйте - считайте, что после 100 патча у меня будет 50 из Some (epxando) ... - это проблема не кедировать мертвые вещи , – Chameleon

1

Вы можете изменить свое имя класса модели и указать его на существующее хранилище данных Kind, переопределив метод модели _get_kind().

class SomeFile(ndb.Model): 
    @classmethod 
    def _get_kind(cls): 
     return 'Some' 

Теперь вы можете использовать SomeFile в питона кода при сохранении Some объектов в хранилище данных.

https://cloud.google.com/appengine/docs/python/ndb/modelclass#introduction

+0

Это какая-то идея. Что бы я ни хотел, измените все имена, чтобы упростить код. Я предпочитаю, чтобы X больше X, чем X. – Chameleon

+0

Ну, вы уже удалили старые имена моделей, так что это ваш вариант, или вы можете временно заменить старые модели, чтобы сделать своп, как и другой ответ. –