simple client data base
Mark R Rivet
markrrivet at aol.com
Sat Sep 8 15:40:47 EDT 2012
On Tue, 04 Sep 2012 04:25:14 +0200, Thomas 'PointedEars' Lahn
<PointedEars at 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.
More information about the Python-list
mailing list