在GAE中存储对象列表

时间:2010-04-16 11:09:12

标签: python google-app-engine google-cloud-datastore

我需要存储一些看起来像这样的数据:

xyz 123
abc 456
hij 678
rer 838

现在我将它存储为传统的字符串和整数模型,并放入数据存储区。但是数据会定期更改,并且在将其视为COLLECTION时仅相关。因此,它需要存储为列表列表或对象列表,据我所知,如果没有酸洗,这两者都无法真正完成。有人可以帮忙吗?即使将其存储为文本文件也可以:S

编辑:我似乎对细节模糊不清。

我正在从外部源采样一些数据(如果重要的话,通过BeautifulSoup / http2lib进行抓取)。然后,这个数据需要整体存储,因为它将被绘制在图表上。数据发生了变化(但不常见 - 可能每周一次)。由于数据集非常简单(字面意思是您在上面看到的,1个字符串字段和1个整数),我认为将它们存储为列表列表更容易,然后将它们实际存储在模型中。我有一种感觉,我过分关注数据需要作为一个大块存储在一起的事实,跳过了一个更简单的解决方案。

我将同时存储500多个这些数据位。

2 个答案:

答案 0 :(得分:1)

您可以将它们存储为两个单独的列表,并且只在实际访问它们时担心将它们组合在一起。像这样:

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

答案 1 :(得分:0)

如果它只是一个元组列表/两个“列”,你可以只使用一个交替列表和一个ListProperty吗?如果数据具有一致的维度,很小并且不需要索引,那么这将没有问题。

e.g。要对列表中给出的示例进行编码,请执行以下操作:

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