python persistence
Gabriel Genellina
gagsl-py2 at yahoo.com.ar
Tue Apr 1 01:16:15 EDT 2008
En Tue, 01 Apr 2008 00:48:35 -0300, <castironpi at gmail.com> escribió:
> We do have, but on Windows, file is not locked to multi-tasking,
> shelve. But why don't we have types in there, or non-string
> primitives in keys?
>
>>>> c= shelve.open( 'temp', 'c' )
>>>> c['0']= 'a'
>>>> c.sync()
>>>> del c
>>>> c= shelve.open( 'temp', 'c' )
>>>> c['0']
> 'a'
>
>>>> c['0'].append( 0 )
>>>> c['0']
> []
The above session doesn't make sense unless it's somewhat related to "on
Windows, file is not locked to multi-tasking," and another process has
modified the database in-between. I don't think the problem is restricted
to Windows only. There exist file locking mechanisms.
> And why don't primitive mutations modify contents of disk? A
> metaquestion.
They do, if you pass writeback=True to the shelve constructor, but read
the docs.
shelve is a simple class; if it can't fulfill your needs, you may want to
use a relational database (perhaps with an ORM like SQLObjects or
SQLAlchemy) or an object database like ZODB or Durus.
>>>> c['0']= type('None',(),{})
> Traceback (most recent call last):
> pickle.PicklingError: Can't pickle <class '__main__.None'>: it's not
> found as __main__.None
Don't do that then. Or use the available pickle hooks to customize how
such classes may be pickled. All persistence mechanisms have limitations.
--
Gabriel Genellina
More information about the Python-list
mailing list