據悉,Python的擱置模塊要求所有的鍵都是字符串,並且有各種解決方法(請參閱線程here和here)。我的問題是,爲什麼擱置需要字符串鍵?考慮到我可以醃製一個使用其他物體作爲鍵的字典,並且該擱架在引擎蓋下使用泡菜,爲什麼不能擱置自己處理這些鍵?字符串鍵是否使得只更新持久對象的一部分變得非常簡單,而不必重寫整個事物(如果是這樣,爲什麼)呢?爲什麼Python的擱置要求所有的鍵都是字符串?
回答
由於引擎蓋下的擱置模塊使用bsddb,gdbm或dbm之一進行存儲,並且它們僅支持字符串鍵。
你是對的,你可以醃製一個使用其他對象作爲鍵的字典,但是當一個鍵改變時,你必須刷新整個存儲。通過使用像這樣的鍵值數據庫,僅刷新更改的值。
所以是shelve使用非特定於Python的數據庫格式的答案,所以不像Python-像純粹的泡菜一樣友善?所以沒有技術上的理由說明,如果一個人願意放棄與非Python數據庫的兼容性,那麼爲什麼不能編寫一個類似shelve的庫來允許更多的類型作爲鍵? – kuzzooroo
那麼,當你在其中存儲特定於Python的格式時,不應該擔心與非Python數據庫的兼容性問題。你總是可以自由地將貨架包裝在一個界面中,該界面接受任何東西作爲鍵並將其序列化爲可存儲和檢索的字符串。 –
謝謝你的快速回復。你寫道:「你總是可以自由地將擱架包裝在一個接口中,該接口接受任何東西作爲關鍵字並將其序列化爲可存儲和檢索的字符串。」我不明白的是爲什麼Python默認情況下不能有效地執行此操作。僅僅是圖書館的創建者正在構建現有的非Python工具來保存從零開始構建的工作(即沒有技術限制)?還是有其他的理由來擱置bsddb,gdbm和dbm? – kuzzooroo
- 1. 爲什麼所有日期字符串都變成數字?
- 2. 爲什麼php字符串中的所有單詞都是這樣的
- 3. 爲什麼升級到Rails 3後,所有的字符串都是ASCII-8BIT?
- 4. 爲什麼每個字符串都有空字符串?
- 5. 爲什麼我所有的外鍵都是空的?
- 6. 爲什麼python要求文檔字符串縮進?
- 7. Python中的所有字符串格式是什麼?
- 8. 所有候選鍵都是超級鍵,而所有超級鍵都不是候選鍵。爲什麼?
- 9. Ruby:爲什麼我的數組中所有字符串的末尾都有`nil`?
- 10. 是否需要所有字符串都是unicode?
- 11. 爲什麼字符串不需要新的關鍵字
- 12. python:是否有可能要求函數的參數都是關鍵字?
- 13. 字符串什麼都沒有打印
- 14. 當所有需要的都是'require_once'時,'require'需要什麼?
- 15. 爲什麼應該(每個字符串?[])都是正確的?
- 16. 什麼都要返回string.Split(「;」)如果字符串爲null或空
- 17. 如何確保PHP生成的JSON中的所有鍵名都是字符串?
- 18. 當我應用於包含字符串的data.frames時,爲什麼所有元素都會被字符串化?
- 19. 我使用PHPrunner但所有字符串字段都是空的
- 20. 爲什麼HashMap的被覆蓋現有的字符串鍵值
- 21. 如何檢查字符串中的所有字符是否都是字母?
- 22. 爲什麼字符串總是空的?
- 23. python中字符串的最後位置是什麼?
- 24. 什麼是Perforce「擱置」文件?
- 25. 什麼是Subversion等同於TFS擱置?
- 26. 一個爲什麼要使用字符串鍵的哈希過的符號
- 27. 爲什麼要尋找字符串?
- 28. 爲什麼C++字符串需要\ 0?
- 29. 什麼時候需要字符串作爲散列鍵
- 30. 爲什麼webservice將所有請求和響應類型指定爲字符串?
我的猜測是它的使用鍵作爲其持久性數據庫和數據庫的列名是挑剔的列名 – cmd