[Tutor] How to model objects aimed to persistence?

Steven D'Aprano steve at pearwood.info
Thu Jun 17 01:47:13 CEST 2010

On Thu, 17 Jun 2010 06:39:44 am Knacktus wrote:

> So far, so good. But what is best practise to prepare this data for
> general persistence? It should be usable for serialisation to xml or
> storing to an RDBMS or ObjectDatabase ...

Oh wow, deja vu... this is nearly the same question as just asked a day 
or so ago, in the thread "conventions for establishing and saving 
default values for variables". The answer I give will be more or less 
the same as was already given in that thread:

Use ConfigParser for ini-style config files.

Use pickle or shelve for serialising arbitrary Python objects.

You probably shouldn't use marshal, as that's awfully limited and really 
only designed for serialising Python byte code.

You can roll your own XML solution using the various XML modules in the 
standard library, or use plistlib, an XML-based storage format borrowed 
from Mac OS X.

Or one of the other standard serialisers like JSON or YAML, although 
YAML is not in the standard library yet.

Or you can use any one of many different databases, although that's 
probably massive overkill.

> I guess I have to incorporate some kind of id for every object and
> use this as reference with some kind of look-up dictionary, 

"Have to"? Certainly not. If your data doesn't need an ID field, there's 
no need to add one just for serialisation. It would be a pretty bizarre 
serialiser that couldn't handle this:

{key: value}

but could handle this:

({id: key}, {key: value})

> but I 
> wouldn't like it and hope that there're some other sweet pythonic
> solutions?

There's a few... :)

By the way, looking at your class name:

class FavoritMovies(object):

I can forgive the American (mis)spelling of Favo(u)rite, but why have 
you dropped the E off the end of "favorite"? I'd almost think your 
keyboard was broken, but no, you have E in Movies and object.

Deliberate misspellings in class and variable names will cost you *far* 
more in debugging time when you forget to misspell the words than they 
will save you in typing. Trust me on this.

Steven D'Aprano

More information about the Tutor mailing list