2013-12-09 2 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' замачивает данные, поэтому вы * не можете * сохранять данные в текстовом формате, используя его. 2) Он использует базу данных для хранения данных, поэтому вы * определенно * не можете использовать' shelve' для хранения данные в обычном формате. То, что вы хотите, это так называемый файл значений разделенных запятыми, иначе ['csv'] (http://docs.python.org/2/library/csv.html) – Bakuriu

+0

Это не то, о чем я просил. Я отредактировал вопрос, чтобы сделать его более понятным. База данных хранит объекты, каждый объект является StudentRecord. Как назначить для них ключевые значения, чтобы не перекрывать их для каждого объекта? – user791953

ответ

0

Для чего-то эта структурированная база данных sqlite может быть на самом деле лучше. Если вы не хотите иметь дело с SQL, вы можете использовать sqlalchemy или для чистого ORM в памяти, который может сериализоваться в sqlite и из него, есть norman. Однако, если вы действительно настроены на полку, тогда это зависит от того, как вы хотите получить доступ к данным. В качестве хранилища ключевого значения вам нужно представлять каждый объект, который вы храните в качестве dict, что означает, что вам нужно решить, как вы хотите искать записи. Например, вы можете структурировать его по имени:

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

Конечно, это работает только, если вы можете гарантировать, что каждое имя уникально. В качестве альтернативы вы можете создать уникальный идентификатор (например, UUID или просто назначенное автоматически целое число), но как только вы начнете с этого пути, вы очень быстро обнаружите, что создаете свою реализацию «sqliteish». Это также предполагает, что вы хотите получить доступ к каждому объекту в целом, но если ваша таблица действительно такая простая, я не уверен, почему вы этого не сделали.

Смежные вопросы