Thanks for the code. For those who might also be interested in an ORM base class providing __init__, update and __repr__ - this is what I use now with 0.5 (comments welcome):
================================================= import sqlalchemy as sql from sqlalchemy import orm class MyOrm(object): def __init__(self, **kw): """Create a mapped object with preset attributes""" for key, value in kw.iteritems(): if hasattr(self, key): setattr(self, key, value) elif not ignore_missing_columns: raise AttributeError('Cannot set attribute which is not column in mapped table: %s' % (key,)) def update(self, update_dict, ignore_missing_columns=True): """Update an object's attributes from a dictionary""" for key, value in update_dict.iteritems(): if hasattr(self, key): setattr(self, key, value) elif not ignore_missing_columns: raise AttributeError('Cannot set attribute which is not column in mapped table: %s' % (key,)) def __repr__(self): """Return a decent printable representation of a mapped object and its attributes.""" atts = [] columns = orm.object_mapper(self).mapped_table.c for column in columns: key = column.key if hasattr(self, key): col = columns.get(key) if not (getattr(col, 'server_default', None) is not None or isinstance(getattr(col, 'default', None), sql.PassiveDefault) or getattr(self, key) is None): atts.append( (key, getattr(self, key)) ) return self.__class__.__name__ + '(' + ', '.join(x[0] + '=' + repr(x[1]) for x in atts) + ')' ================================================= Would be nice if mapped objects could automatically get such methods assigned. Not sure if SQLAlchemy can or should provide that or if it broke other functionality. Cheers Christoph
signature.asc
Description: This is a digitally signed message part.