bsddb for k, v in db.items(): do order the numbers ?

Ulf Göransson ug at algonet.se
Mon Mar 7 18:32:50 CET 2005


martijn at gamecreators.nl wrote:
> uhm i'm trying to make a very simple but large database:
> 
> Let's say I want these fields : |name|age|country|
> 
> Then I can't do this because I use the same key
> 
> db["name"] = 'piet'
> db["age"] = '20'
> db["country"] = 'nl'
> #    same keys so it wil overwrite
> db["name"] = 'jan'
> db["age"] = '40'
> db["country"] = 'eng'
> 
> But how does other people use bsddb then ?
> - with a hidden |int like below ?
> 
> db["name|0"] = 'jan'
> db["age|1"] = '40'
> db["country|2"] = 'eng'
> 
> - do a little math to
> first is name
> sec is age
> third is country
> 
> db["0"] = 'jan'
> db["1"] = '40'
> db["2"] = 'eng'
> 
> pointer=0
> for k, v in db.items():
>   if pointer =3:
>     poiner = 0
>     #next 3 fields
> 
> ----------------------
> I like bsddb because of the speed and it can handle big files,
> but what is the normal way of using it ?

I don't know about normal but I'd probably do something like

db['piet'] = repr(['piet', 20, 'nl'])

or maybe

db['jan'] = repr({"name":'jan', "age":40, "country":'eng'})

That should hold until Piet #2 comes along, then I might add another 
level of lists...

With more complicated data I'd do as the docs say and take a look at 
marshal or pickle instead of using repr(). And use a class instead of 
lists or dicts...

/ug



More information about the Python-list mailing list