Хранение списка объектов в GAE - PullRequest
2 голосов
/ 16 апреля 2010

Мне нужно сохранить некоторые данные, которые выглядят примерно так:

xyz 123
abc 456
hij 678
rer 838

Теперь я бы просто сохранил ее как традиционную строковую и целочисленную модель и поместил в хранилище данных. Но данные регулярно меняются и имеют значение ТОЛЬКО для КОЛЛЕКЦИИ. Поэтому его нужно хранить в виде списка списков или списка объектов, которые, насколько я знаю, не могут быть выполнены без травления. Кто-нибудь может помочь? Даже сохранение в виде текстового файла может работать: S

Редактировать: Кажется, я немного расплывчат в деталях.

Я выбираю некоторые данные из внешнего источника (извлекаю их через BeautifulSoup / http2lib, если это имеет значение). Затем эти данные необходимо сохранить в целом, поскольку они будут отображены на графике. Данные меняются (но не часто - возможно, раз в неделю). Поскольку набор данных очень прост (буквально то, что вы видите выше, 1 строковое поле и 1 целое число), я решил, что проще сохранить их в виде списка списков, а затем фактически сохранить их в модели. У меня такое чувство, что я пропустил еще более простое решение, сосредоточившись слишком на том факте, что данные должны храниться вместе как один большой кусок.

Я буду хранить 500+ этих битов данных как группу сразу.

Ответы [ 2 ]

1 голос
/ 20 апреля 2010

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

class MyModel(db.Model):
    my_strings = db.StringListProperty()
    my_ints = db.ListProperty(int)

    def get_data(self):
        return zip(self.my_strings, self.my_ints)

    def set_data(self, data):
        self.my_strings = [element[0] for element in data]
        self.my_ints = [element[1] for element in data]

    data = property(get_data, set_data)

Таким образом, вы можете просто сделать что-то вроде

entity = MyModel()
entity.data = [("xyz", 123), ("abc", 456), ("hij", 678)]
entity.put()

# ...

for string_value, int_value in entity.data:
    # do something
0 голосов
/ 17 апреля 2010

Если это действительно просто список кортежей / двух «столбцов», не могли бы вы просто использовать чередующийся список и ListProperty? Это было бы хорошо, если бы данные имели согласованное измерение, были небольшими и не требовали индексации.

например. Чтобы закодировать пример, который вы дали в списке, выполните:

# i forget if mixed types are allowed, but you get the idea.
["xyz", 123, "abc", 456, "hij", 678, "rer", 838]
...