[Zope-dev] OR mapping proposal

Shane Hathaway shane@digicool.com
Tue, 15 May 2001 13:54:23 -0400 (EDT)


On Tue, 15 May 2001, Phillip J. Eby wrote:

> If we had a standardized manipulation API or idioms (like JavaBeans) for
> application objects, then having lots of ways to *implement* storage would
> be a good thing.  Different products and offerings could co-exist and
> compete in the storage implementation space, and users would have the
> benefits of being able to choose their back-ends and app frameworks without
> being locked into one framework's API.

That sounds useful, though I've been hinting at a more gradual approach.
For example, I might define an OR mapping like this early on (roughly):

class UserMapping (ObjectMappingScheme):
    def loadState(self, object, key, store, cursor):
        records = cursor.execute('select login, password from users'
                                 ' where uid=%(key)s', {'key': key})
        d = object.__dict__
        r = records[0]
        d['id'] = key
        d['login'] = r['login']
        d['__'] = r['password']

    def storeState(self, object, key, store, cursor, transaction):
        d = object.__dict__
        cursor.execute('update users set login=%(id)s password='
                       '%(__)s where uid=%(id)s', d)

Then I might see that many tables conform to a pattern and I would convert
it to this:

UserMapping = SimpleAttributeMapping(table='users',
  {'id':'uid', 'login':'login', '__':'password'})

Then I could make a web interface for creating SimpleAttributeMapping
objects.  Of course this is just the simplest case and things get more
interesting when you have hierarchies of objects or complex queries.

> Perhaps I should offer up a counter-proposal, focused on establishing a
> common API and proposing some of the requirements for same?  Presumably we
> are all agreed that it should be as Pythonic as possible, but no more so.
> :)  Also, API is perhaps not the right word, it is more about access and
> manipulation idioms.  It needs to deal explicitly with the notion of
> relationships as well as "attributes" in the sense of data fields.  And it
> needs to deal with the notion of how you determine what classes should be
> used for what things and how to get at those classes (since they may need
> to be backend-specific).

You mean a "complementary" proposal, don't you?

> These are issues, by the way, which the current ZODB API dodges, and that
> is why I've been saying that doing O-R mapping in ZODB doesn't help the key
> issues of database independence.  You *still* have to code to a style that
> is compatible with changing back-ends.  I think it might be helpful if we
> all got on the same page about what that style should be, and then all
> these efforts could go forward knowing that in the Zope application space,
> users will only need to learn one such style at the Python level, and any
> education efforts about that style can be leveraged across many possible
> implementation approaches.

Sounds great!

Shane