2013-12-09 65 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”实现。这也假定你想要访问每个对象作为一个整体,但如果你的表真的很简单,我不知道你为什么不这样做。

相关问题