2010-04-16 87 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