2010-02-22 411 views
1

如果我有一個完整的嵌套東西的字典,我該如何將它作爲一個字符串存儲在數據庫中?然後,當我準備解析時,將其轉換回字典?如何在數據庫中存儲字典/列表?

編輯:我只是想將其轉換爲字符串...然後回到字典。

回答

2

最佳,您的規定的條件下:

import cPickle 
    ... 
thestring = cPickle.dumps(thedict, -1) 

-1保證最有效地串行化,併產生一個二進制(字節任意字符串)。如果你需要一個ascii字符串(因爲例如一些Unicode轉碼將發生,並且你不能將字段的類型從TEXT切換到BLOB),請避免使用-1,但效率會降低。

從字符串得到字典回來以後,在任何情況下,

thenewdict = cPickle.loads(thestring) 
+0

這將與utf-8一起工作,對吧? (只是,默認字符串,我的意思是。) – TIMEX 2010-02-23 00:37:38

+0

'utf-8'在鍵和值方面很好,但不能保證'thestring'會遵循'utf-8'編碼(很可能它不會:它是隻是字節!)。如果這是一個問題,你必須省略'-1'參數(有一個原因,「做最快,最有效,最簡潔的序列化」不是默認的,但需要顯式的'-1'...實際上有多個原因,但這是其中之一;-)。 – 2010-02-23 00:45:11

+0

出於安全原因,我要避免-1 :),只是做正常。無論如何我都不在乎速度。 – TIMEX 2010-02-23 00:55:26

4

選項:

1)酸洗

2)XML

3)JSON

別人我肯定。它對可移植性對您的意義有很大的影響。

+0

我只是想將它轉換爲字符串...然後回到字典。 – TIMEX 2010-02-22 13:55:51

+0

如果你不關心可移植性,那麼去酸洗(http://docs.python.org/library/pickle.html)功能。去尋找更快的「cpickle」變種。 – jldupont 2010-02-22 14:06:18

1

你有兩個選擇

  • 使用標準序列化格式(JSON,XML,YAML,.. )

    • 優點:您可以使用任何可以解析這些格式的語言進行訪問(在最糟糕的情況下,您可以編寫自己的解析器)
    • 缺點:可能會比較慢,保存並加載數據(這主要取決於執行)
  • 使用的cPickle:

    • 優點:使用方便,快捷,原生的Python的方式做序列化。
    • 缺點:只有基於python的應用才能訪問數據。
2

有任何數量的序列化方法在那裏,JSON是可讀的,緊湊合理,原生支持,而且便於攜帶。我更喜歡它,因爲後者可以執行任意代碼並可能引入安全漏洞,並且因爲它的可移植性。

根據您的數據佈局,您也可以使用ORM將數據直接映射到數據庫結構中。