2013-11-01 47 views
3

據悉,Python的擱置模塊要求所有的鍵都是字符串,並且有各種解決方法(請參閱線程herehere)。我的問題是,爲什麼擱置需要字符串鍵?考慮到我可以醃製一個使用其他物體作爲鍵的字典,並且該擱架在引擎蓋下使用泡菜,爲什麼不能擱置自己處理這些鍵?字符串鍵是否使得只更新持久對象的一部分變得非常簡單,而不必重寫整個事物(如果是這樣,爲什麼)呢?爲什麼Python的擱置要求所有的鍵都是字符串?

+0

我的猜測是它的使用鍵作爲其持久性數據庫和數據庫的列名是挑剔的列名 – cmd

回答

3

由於引擎蓋下的擱置模塊使用bsddb,gdbm或dbm之一進行存儲,並且它們僅支持字符串鍵。

你是對的,你可以醃製一個使用其他對象作爲鍵的字典,但是當一個鍵改變時,你必須刷新整個存儲。通過使用像這樣的鍵值數據庫,僅刷新更改的值。

+0

所以是shelve使用非特定於Python的數據庫格式的答案,所以不像Python-像純粹的泡菜一樣友善?所以沒有技術上的理由說明,如果一個人願意放棄與非Python數據庫的兼容性,那麼爲什麼不能編寫一個類似shelve的庫來允許更多的類型作爲鍵? – kuzzooroo

+0

那麼,當你在其中存儲特定於Python的格式時,不應該擔心與非Python數據庫的兼容性問題。你總是可以自由地將貨架包裝在一個界面中,該界面接受任何東西作爲鍵並將其序列化爲可存儲和檢索的字符串。 –

+0

謝謝你的快速回復。你寫道:「你總是可以自由地將擱架包裝在一個接口中,該接口接受任何東西作爲關鍵字並將其序列化爲可存儲和檢索的字符串。」我不明白的是爲什麼Python默認情況下不能有效地執行此操作。僅僅是圖書館的創建者正在構建現有的非Python工具來保存從零開始構建的工作(即沒有技術限制)?還是有其他的理由來擱置bsddb,gdbm和dbm? – kuzzooroo

相關問題