2013-05-07 69 views
0

下面是一個簡單的Python腳本存儲在ScraperWiki一些數據:數據附加到ScraperWiki數據存儲

import scraperwiki 
scraperwiki.sqlite.save(unique_keys=["a"], data={"a":1, "b":"Foo"}) 
scraperwiki.sqlite.save(unique_keys=["a"], data={"a":1, "c":"Bar"}) 

結果是在數據存儲如下表:

a b c 
1  Bar 

這是煩人,因爲在我的第二個sqlite.save命令中,我沒有指定"b":""或任何其他此類的東西來將第1行的「b」列的內容留空。換句話說,我的所需的結果是以下表結尾在數據存儲區:

a b c 
1 Foo Bar 

所以我的問題是:使用連續當「保存」操作的ScraperWiki數據存儲,什麼是不覆蓋現有數據追加數據的最佳方式,以達到某種結果我已經在上面列出了?

回答

0

我對這個問題的解決方案是用連續的修改替換連續的保存操作,以便對Python字典中的字典進行修改:對於數據存儲的預期內容的每一行,一個子字典。使用詞典而不是詞典列表可以更容易地寫入相關的子詞典,儘管存在兩個小問題:

  • 重複字典中的唯一鍵;
  • 考慮到Scraperwiki數據存儲(IIUC)不接受前一種結構但接受後者,需要在保存到數據存儲之前從字典字典中生成字典列表。

NB。對於大量的數據行,在一次操作中將字典列表保存到數據存儲比對這些字典進行迭代並將它們一次保存到數據存儲要快得多。

代碼示例:

import scraperwiki 
superdictionary = {} 
superlist  = [] 
superdictionary['1'] = {"a":1, "b":"Foo"} 
superdictionary['1'].update({"c":"Bar"}) 
superdictionary['2'] = {"a":2, "b":"Grue", "c":"Gnu"} 

for subdictionary in superdictionary: 
    superlist.append(superdictionary[subdictionary]) 
scraperwiki.sqlite.save(["a"], superlist) 

應出示:

a b  c 
1 Foo Bar 
2 Grue Gnu 
1

我有同樣的問題,因爲你發現你的答案是非常有用的。爲了讓它工作,我不得不微調你的代碼。具體來說,我把你的第五行改爲:

superdictionary['1'].update({"c":"Bar"}) 

然後產生所需的結果。

+0

感謝您捕捉該錯誤;我相應地更新了我的答案。 – sampablokuper 2013-05-14 02:47:30