You could look at PyDO (Python Data Objects), available at
http://skunkweb.sourceforge.net. It is distributed as part of SkunkWeb,
a Python-based web application server (and thus an alternative to
Webware), but can be used separately.
With PyDO, you create classes that represent the tables in your
database (there are in fact automated scripts that do part of this for
PostgreSQL). You can then treat your data as if it were Python objects,
and do things like the following (Composer is the class representing a
table of composers):
newComp = Composer.new(name = 'Hugo Wolf', country = 'Austria')
to create a new record
for field in newComp.keys():
to print or otherwise all the fields in a record
newComp['name'] = 'Johann Strauss'
to change a field
to delete a record
Composer.getUnique(name = 'Max Reger')
to get one record
rows = Composer.getSome(country = 'Austria')
for r in rows:
to get a group of rows and process them
There are additional methods for joins, etc.
It supports MySQL, PostgreSQL, Oracle, sqlite, and a few others, and
there is a template for creating other database adapters. You basically
change one connection string to switch database engines.
All this in about 12 pages of source code, very nifty. I haven't looked
at any others, however, and would be interested in others' comments
about other available solutions of this type.