2010-09-30 3 views
0

Привет, я разбираюсь в документах GAE и нуждаюсь в небольшом разъяснении. Если у меня есть дб модель что-то вроде этого: -Google appengine-db.key()

class Phone(Model): 
    phone_name = db.StringProperty() 

r = Phone(Nokia, key_name='first') 
r.put() 

Теперь, если я должен получить этот объект, но я не знаю, ключ, я могу построить ключ, как это:

k=db.Key('Phone','first') 

и один раз ключ строится, может ли объект быть восстановлен следующим образом: -

r=db.get(k) 

ответ

2

Вы близко. Единственным существенным отличием является , что вы должны передать фактический класс вместо строки, представляющей имя класса, и, что вы должны использовать метод Key.from_path() фабрики, а не конструктор по умолчанию:

class Phone(Model): 
    phone_name = db.StringProperty() 

r = Phone(phone_name='Nokia', key_name='first') 
r.put() 

k = db.Key.from_path('Phone', 'first') 

r = db.get(k) 

В целом , однако я обнаружил, что использование автоматических идентификаторов обычно является лучшим решением, чем определение ваших собственных имен ключей. Есть ли конкретная причина, по которой вы делаете последнее?

+0

Спасибо большое! ... Я просто изучаю – Rasmus

+1

Я не думаю, что автогенерированные идентификаторы лучше, у них просто другой вариант использования. Если у вас есть предсказуемый, фиксированный уникальный идентификатор для объекта до его сохранения, имена ключей являются идеальным решением. –

+0

Я согласен, что каждый из них их использует (следовательно, «обычно»). Просто в большинстве случаев вы будете дублировать усилия по созданию уникальных идентификаторов, тем более что в конце концов гораздо удобнее передавать закодированные ключи, а не идентификаторы или имена. –