В низкоуровневой Java api я имел обыкновение создавать имена сущностей во время выполнения.
В python кажется, что я должен предварительно определить имя класса, также являющееся моим именем:
class SomeKindaData(db.Expando):
pass
sKD = SomeKindaData(key_name='1')
...
Есть ли способ сделать имена сущностей во время выполнения в App Engine для Python?
Я мало знаю об App Engine, но вы можете определять классы во время выполнения следующим образом:
def get_my_class(name):
return type(name, (db.Expando,), {})
Итак type принимает три аргумента:
У самих сущностей нет имен. В хранилище данных объекты идентифицируются ключами, которые могут иметь имена или идентификаторы. Вы указываете имя своего сущности "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)