In article <mailman.2426.1265976954.28905.python-l...@python.org>, Tim Chase <python.l...@tim.thechases.com> wrote: >Aahz wrote: >> Tim Chase <python.l...@tim.thechases.com> wrote: >>> >>> Just to add to the mix, I'd put the "anydbm" module on the gradient >>> between "using a file" and "using sqlite". It's a nice intermediate >>> step between rolling your own file formats for data on disk, and having >>> to write SQL since access is entirely like you'd do with a regular >>> Python dictionary. >> >> Not quite. One critical difference between dbm and dicts is the need to >> remember to "save" changes by setting the key's valud again. > >Could you give an example of this? I'm not sure I understand >what you're saying. I've used anydbm a bunch of times and other >than wrapping access in > > d = anydbm.open(DB_NAME, "c") > # use d as a dict here > d.close() > >and I've never hit any "need to remember to save changes by >setting the key's value again". The only gotcha I've hit is the >anydbm requirement that all keys/values be strings. Slightly >annoying at times, but my most frequent use case.
Well, you're more likely to hit this by wrapping dbm with shelve (because it's a little more obvious when you're using pickle directly), but consider this: d = anydbm.open(DB_NAME, "c") x = MyClass() d['foo'] = x x.bar = 123 Your dbm does NOT have the change to x.bar recorded, you must do this again: d['foo'] = x With a dict, you have Python's reference semantics. -- Aahz (a...@pythoncraft.com) <*> http://www.pythoncraft.com/ "At Resolver we've found it useful to short-circuit any doubt and just refer to comments in code as 'lies'. :-)" -- http://mail.python.org/mailman/listinfo/python-list