2011-11-04 49 views
2

我需要將實例(或至少它們的狀態)存儲在數據庫中。這個想法是,我應該能夠按需重新創建實例。由於我定義了類,我可以選擇我想要如何存儲數據。Python:在數據庫中存儲對象狀態的最佳方法?

請看下面的圖,繼承圖:

    A 
       /\ 
        B C 
       /\ /\ 
       D E F ... 

的想法是,該實例可以屬於任何類和它本身可以存儲其他對象(即我已經完全設計控制權)。

我的第一個想法是將狀態專門存儲在字典中,將字典轉儲爲json並將其存儲在數據庫中。在運行時,從數據庫加載json將其轉換爲字典,創建一個對象傳遞字典,得到的設置等等...

我不知道如果這是一個好方法,並且如果有還有其他可能會出現的問題。我已經遇到一個,如果你使用myobj.dict,你實際上並沒有得到所有班級的父母的屬性,但...

有什麼建議嗎?

+2

它是否必須是數據庫?一個簡單的愚蠢的解決方案是把它們醃到一個文件。 – Daenyth

+0

http://www.python.org/workshops/1997-10/proceedings/shprentz.html –

+2

http://docs.python.org/library/shelve.html –

回答

2

有幾種方法。我真的不認爲我們可以通過您提供的信息告訴您最適合您的方式。

這些都是我能想到的辦法。只有你可以確定哪一個最符合你的要求和意圖。

+0

這是一個很好的答案。它還應該提到*擱置*,其具有接近於零的學習曲線並且包含在標準庫中(不需要安裝第三方模塊)。 –

+0

@RaymondHettinger - 你是對的。我想我認爲它是第三種選擇的一部分,但我會編輯它以反映*擱置*,謝謝。 – gomad

+0

我結束了與zodb爲我的需要,儘管擱置可能會起作用,但似乎並不適用於非常大的數據集。 – noobzie

0

我的建議是圍繞你的狀態設計一個對象模型,並使用Python的ORM工具包。在這裏提到幾個 - What are some good Python ORM solutions?

我相信它不是最好的重新發明車輪。您可以使用ORM工具箱來存儲狀態或實際的對象實例樹本身。

2

shelve module是存儲通過密鑰檢索實例的最簡單方法。它會自動爲你清理和取消,並負責讀取和寫入文件。

相關問題