Храните список словарей в GAE

У меня есть список из примерно 20 объектов, и для каждого объекта я возвращаю список из 10 словарей.
Я пытаюсь сохранить список из 10 словарей для каждого объекта в списке GAE; Я не думаю, что правильно пишу код, чтобы хранить эту информацию в GAE.
Вот что у меня есть: перед моим основным обработчиком запросов у меня есть этот класс:

class Tw(db.Model): tags = db.ListProperty() ip = db.StringProperty() 

В моем основном обработчике запросов у меня есть следующее:

 for city in lst_of_cities: # this is the list of 20 objects dict_info = hw12.twitter(city) # this is the function to get the list of 10 dictionaries for each object in the list datastore = Tw() # this is the class defined for db.model datastore.tags.append(dict_info) # datastore.ip = self.request.remote_addr datastore.put() data = Data.gql("") #data entities we need to fetch 

Я не уверен, что этот код вообще пишет. Если кто-то мог бы помочь, это было бы очень признательно.

  • Как «установить» модуль в Google App Engine?
  • Приложения не будут запускаться в GAE - «невозможно связать с localhost: 0»
  • Как открыть файл в родительском каталоге в python в AppEngine?
  • Google App Engine: не будет обслуживать статические активы с ошибкой ниже:
  • Как избежать «Не удалось получить токен доступа: {« error »:« invalid_grant »} в автономных задачах CAE cron?
  • Как получить более 1000?
  • Создайте файл данных Pandas для облачного хранилища Google или BigQuery
  • Зачем использовать Django в Google App Engine?
  • 3 Solutions collect form web for “Храните список словарей в GAE”

    Добро пожаловать в переполнение стека!

    Я вижу несколько вопросов:

    1. Словари не поддерживают типы значений для свойств App Engine.
    2. Вы сохраняете только последний объект; остальные отбрасываются.
    3. Вы используете ListProperty, но вместо добавления каждого элемента dict_info вы делаете одно добавление всего списка.

    Поскольку вы не можете хранить исходный словарь внутри свойства, вам необходимо его сериализовать в другом формате, таком как JSON или pickle. Вот пересмотренный пример использования рассола:

     from google.appengine.ext import db import pickle class Tw(db.Model): tags = db.BlobProperty() ip = db.StringProperty() entities = [] for city in lst_of_cities: dict_info = hw12.twitter(city) entity = Tw() entity.tags = db.Blob(pickle.dumps(dict_info)) entity.ip = self.request.remote_addr entities.append(entity) db.put(entities) 

    Когда вы выберете объект позже, вы можете получить список словарей с помощью pickle.loads(entity.tags) .

    Когда я сталкиваюсь с типами данных, которые напрямую не поддерживаются Google App Engine, например, словари или пользовательские типы данных, я обычно принимаю удобный PickleProperty .

     from google.appengine.ext import db import pickle class PickleProperty(db.Property): def get_value_for_datastore(self, model_instance): value = getattr(model_instance, self.name, None) return pickle.dumps(value) def make_value_from_datastore(self, value): return pickle.loads(value) 

    После объявления класса PickleProperty в вашем модуле commons.py вы можете использовать его для хранения ваших пользовательских данных с чем-то вроде этого:

     from google.appengine.ext import db from commons import PickleProperty class Tw(db.Model): tags = PickleProperty() ip = db.StringProperty() entities = [] for city in lst_of_cities: dict_info = hw12.twitter(city) entity = Tw() entity.tags = dict_info entity.ip = self.request.remote_addr entities.append(entity) db.put(entities) 

    Чтобы вернуть данные, выполните следующие действия:

     entity.tags 

    Поскольку это было написано, App Engine вытолкнул экспериментальную модель базы данных Python «ndb», в которой, в частности, содержится JsonProperty, что очень хорошо реализует то, что вы хотите.

    Теперь вам нужно запустить версию Python 2.7 для App Engine, которая все еще не совсем готова к производству, но в наши дни все выглядит довольно стабильно, сам GvR, похоже, пишет много кода, который служит хорошим предзнаменованием для качество кода, и я намерен использовать его в производстве в этом году …

    Interesting Posts
    Python - лучший язык программирования в мире.