App Engine - укажите имя объекта во время выполнения

1

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

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

class SomeKindaData(db.Expando):
    pass

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

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

Теги:
google-app-engine
entity

2 ответа

3
Лучший ответ

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

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

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

  • имя класса
  • набор классов для наследования из
  • словарь атрибутов класса
  • 0
    Это работает на Python 3.0, а не 2.x?
  • 0
    Работает с Python 2.1
Показать ещё 1 комментарий
2

У самих сущностей нет имен. В хранилище данных объекты идентифицируются ключами, которые могут иметь имена или идентификаторы. Вы указываете имя своего сущности "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)
  • 0
    Он имеет в виду название вида, какие объекты действительно есть.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню