2013-12-09 101 views
2

我想使用簡單的平面文件而不是SQLite存儲記錄。所維護的數據格式如下:什麼是使用Shelve存儲物品的正確方法?

<Name> <Assignment> <Grade> 

我做了一個簡單的類名爲StudentRecord,

class StudentRecord: 
    def __init__(self, name, assignment, grade): 
     self.name = name 
     self.assignment = assignment 
     self.grade = grade 

用來放入數據庫中。我想代表什麼邏輯類似這樣的文件:

Bob Test1 99    (StudentRecord Object) 
John Worksheet 39   (StudentRecord Object) 
Chris Quiz 77    (StudentRecord Object) 

會的關鍵是什麼,我存儲的每個對象?我想讀取所有這些單個對象,並追加到此數據庫中。

+0

1)'shelve' pickles數據,因此你*不能*使用它以文本格式保存數據2)它使用數據庫來存儲數據,所以你*絕對*不能使用'shelve'來存儲數據以普通格式。你想要的是一個所謂的逗號分隔值文件,又名['csv'](http://docs.python.org/2/library/csv.html) – Bakuriu

+0

這不是我所要求的。我編輯了這個問題,使之更加清晰。數據庫正在存儲對象,每個對象都是一個StudentRecord。我如何爲這些鍵值分配鍵值,以避免每個對象重疊? – user791953

回答

0

對於這樣構建的sqlite數據庫實際上可能是最好的。如果你不想處理SQL,你可以使用sqlalchemy,或者用於一個純粹的內存ORM,它可以在sqlite中進行序列化,有norman。但是,如果你真的擱置了,那麼這取決於你想如何訪問數據。作爲一個鍵值存儲,您需要將您存儲的每個對象表示爲一個字典,這意味着您需要決定如何查找記錄。例如,您可以按名稱構造它:

{ 
    'Bob': {'assignment': 'Test1', grade: 99}, 
    'John': {'assignment': 'Worksheet', grade: 39} 
} 

當然,只有在您可以保證每個名稱都是唯一的情況下才有效。或者,你可以創建一個唯一的ID(例如UUID或者只是一個自動分配的整數),但是一旦你開始了這個路徑,你很快就會發現自己創建了「sqliteish」實現。這也假定你想要訪問每個對象作爲一個整體,但如果你的表真的很簡單,我不知道你爲什麼不這樣做。

相關問題