On Tue, 04 Sep 2012 04:25:14 +0200, Thomas 'PointedEars' Lahn <pointede...@web.de> wrote:
>Mark R Rivet wrote: > >> Hello all, I am learning to program in python. I have a need to make a >> program that can store, retrieve, add, and delete client data such as >> name, address, social, telephone number and similar information. This >> would be a small client database for my wife who has a home accounting >> business. >> >> I have been reading about lists, tuples, and dictionary data >> structures in python and I am confused as to which would be more >> appropriate for a simple database. >> >> I know that python has real database capabilities but I'm not there >> yet and would like to proceed with as simple a structure as possible. >> >> Can anyone give me some idea's or tell me which structure would be >> best to use? >> >> Maybe its a combination of structures? I need some help. > >The data types that would choose are defined by your requirements and how >well a data type meets your requirements. > >I can imagine: In a database you would want quick access to data. You would >want to access fields primarily by name. You would also want to filter data >by various criteria. > >Therefore, it appears to me that it would be best if your records were >dictionaries or dictionary-like objects, and your recordsets were lists of >records, like so > >#!/usr/bin/env python3 > >from datetime import date > >data = [ > { > 'lastname': 'Doe', > 'firstname': 'John', > 'sn': '123-451-671-890', > 'birthdata': date(2000, 1, 2) > }, > { > 'lastname': 'Doe', > 'firstname': 'Jane', > 'sn': '409-212-582-452', > 'birthdata': date(2001, 2, 3) > }, >] > >- You could quickly access the second record with data[1]. >- You could access the 'lastname' field of the second record with > data[1]['lastname'] >- You could get a list of records where the person is born before 2001 CE > with filter(lambda record: record['birthdate'] < date(2001, 1, 1), data) > >The advantage of dictionaries over dictionary-like objects is that they are >easily extensible and that the memory footprint is probably lower (CMIIW); >the disadvantage is slightly more complicated syntax and that you have to >keep track of the keys. Therefore, you might want to consider instantiating >a Record class instead; in its simplest form: > >class Record(object): > def __init__(self, lastname, firstname, sn=None, birthdate=None): > self.lastname = lastname > self.firstname = firstname > self.sn = str(sn) > self.birthdate = birthdate > >data = [ > Record(lastname='Doe', firstname='John', sn='123-451-671-890', > birthdate=date(2000, 1, 2)), > Record(lastname='Doe', firstname='Jane', sn='409-212-582-452', > birthdate=date(2001, 2, 3)) >] > >- You could access the 'lastname' property of the second record with > data[1].lastname >- You get a list of records where the person is born before 2001 CE with > list(filter(lambda record: record.birthdate < date(2001, 1, 1), data)) > (in Python 2.x without list()) > >However, if you want your program to manipulate the data *persistently*. as >it will probably be needed for business, you will need to also store it >somewhere else than in the volatile memory in which these data structures >are usually stored. The most simple way would be to store and parse the >string representation of the objects. > >Production-quality implementations of those and other concepts already >exist, of course, but using something finished and polished does not provide >as much learning experience. > >HTH Now this is the kind of answer I was hoping for. This gives me food for thought. Now I have some Ideas of how to appproach this thing. I know that there are solutions to this problem already but I need to do my own before I can really use anything better. Thanks for the help. I fully intend to go with a real realational database, but not now. My version 1 will be a console interface and dictionaries, lists and pickling. Version 2 will be with a GUI written in tkinter, and better and better. I just want to learn how to lay the bricks before I start using prefab walls. -- http://mail.python.org/mailman/listinfo/python-list