2010-04-16 69 views
2

对象的列表我需要存储一些数据,看起来有点像这样:存储在GAE

 
xyz 123 
abc 456 
hij 678 
rer 838 

现在我只想将其存储为一个传统的字符串和整数模型,并把数据存储区。但是数据会定期更改,并且只有在收集时才会有相关性。所以它需要被存储为列表列表或者一系列对象,但据我所知,这两种方法都不能在没有酸洗的情况下完成。谁能帮忙?即使将其作为文本文件存储也可能起作用:S

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

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

我将一次存储500+这些数据位作为一个组。

+2

你可以添加你的数据的一些细节XYZ可以改变? – systempuntoout 2010-04-16 12:25:27

+2

数据集有多大?它多久改变一次?所有数据都是一个需要一次加载的庞大集合,或者是否加载子集?你需要能够索引它吗? – 2010-04-16 13:20:38

+0

我不确定数据集是否简单是不使用模型的原因。尼克以上的问题肯定是相关的,但为什么不只是创建一个有两个属性的简单模型?这样它可以被索引和查询。如果您需要将它们组合在一起,或者开始存储更多数据,则可以简单地将另一个属性添加到模型中,而不是处理列表的列表。 – npdoty 2010-04-17 10:12:01

回答

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 
0

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

例如要编码您在列表中给的例子做:

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

是的,这是第一个突然出现在我脑海中的想法,但我担心离奇的索引问题会进一步恶化。 – 2010-04-17 10:43:59