Чтение db.StringListProperty из ndb

У меня есть модель БД в AppEngine, которая выглядит примерно так:

class MyModel(db.Model):
  my_list = db.StringListProperty()

Есть сущности, записанные в хранилище данных с заполненными этими данными, я могу вытащить их через БД и вижу в средстве просмотра сущностей. Я работал над переходом на NDB, поэтому перенесенная модель:

class MyModel(ndb.Model):
  my_list = ndb.StringProperty(repeated=True)

Но когда я получаю объекты из хранилища данных, my_list никогда не заполняется. Есть ли какой-то трюк для извлечения этих сущностей?




Ответы (1)


У меня еще нет 50 представителей, поэтому я не могу спросить в комментарии, но если вы скопировали свой код, я почти уверен, что ваша проблема в том, что вы все еще ставите префикс «db»

Должен быть

my_list = ndb.StringProperty(repeated=True)

https://cloud.google.com/appengine/docs/python/ndb/db_to_ndb#properties

Мы также стараемся, чтобы наши индексы были как можно меньше, чтобы снизить затраты на запись в хранилище данных, поэтому добавление к нему indexed=False — это то, что мы всегда делаем.

my_list = ndb.StringProperty(repeated=True, indexed=False)

Если это все еще не работает, вам может понадобиться промежуточная функция, чтобы получить версию БД и переписать ее в версию NDB, но, насколько я знаю, в этом нет необходимости (я не выполнял проверку БД). >Миграция NDB сама)

Если вам интересно, несмотря на разные API, NDB и старый пакет ext.db записывают в хранилище данных одни и те же данные. Это означает, что вам не нужно выполнять какое-либо преобразование в хранилище данных, и вы можете с удовольствием смешивать и сопоставлять код NDB и ext.db, если используемая вами схема эквивалентна. Вы даже можете конвертировать между ключами ext.db и NDB, используя ndb.Key.from_old_key() и key.to_old_key().

person Psyrus    schedule 13.07.2016
comment
Спасибо, что указали на это, это была ошибка перестановки/санации. Проверено, что код действительно использует ndb. Миграция данных с помощью задания mapreduce может быть окончательным ответом, как только я доберусь до точки, где это возможно. - person Hounshell; 13.07.2016