App Engine - укажите имя объекта во время выполнения - PullRequest
1 голос
/ 03 мая 2011

В низкоуровневом Java API я имел обыкновение составлять имена сущностей во время выполнения.

В python кажется, что мне нужно предварительно определить имя класса, которое также является моей сущностьюname:

class SomeKindaData(db.Expando):
    pass

sKD = SomeKindaData(key_name='1')
...

Есть ли способ создать имена сущностей во время выполнения в App Engine для Python?

Ответы [ 2 ]

3 голосов
/ 03 мая 2011

Я не знаю много о App Engine, но вы можете определять классы во время выполнения, как это:

def get_my_class(name):
    return type(name, (db.Expando,), {})

Итак, type принимает три аргумента:

  • название класса
  • кортеж классов для наследования от
  • словарь атрибутов класса
2 голосов
/ 03 мая 2011

Сами сущности не имеют имен. В хранилище данных сущности идентифицируются ключами, которые могут иметь имена или идентификаторы. Вы устанавливаете имя ключа вашей сущности на «1» в вашем примере кода. Объекты также классифицируются по видам, в данном случае SomeKindaData.

db.Model и db.Expando предоставляют локальную абстракцию ORM для хранилища данных. Когда вы используете их, по умолчанию для имени вашей сущности устанавливается имя класса вашей модели. Если вы не хотите определять класс модели перед созданием сущности, вы можете использовать низкоуровневый API хранилища данных :

from google.appengine.api import datastore

sKD = datastore.Entity(kind='SomeKindaData', name='1')
sKD['SomeProperty'] = 'SomeValue'
datastore.Put(sKD)
...