Ven wrote: > I use: Python 2.6 and sqlalchemy 0.6.1 > > This is what I am trying to do: > > from sqlalchemy.types import ( > Integer, > String, > Boolean > ) > from sqlalchemy.ext.declarative import declarative_base > > Base = declarative_base() > > class SampleMeta(type): > def __new__(cls, name, bases, attrs): > attrs.update({ 'id': Column('Id', Integer, > primary_key=True), > 'name': Column('Name', String), > 'description': Column('Description', String), > 'is_active': Column('IsActive', Boolean) > }) > return super(SampleMeta, cls).__new__(cls, name, bases, attrs) > > class Sample(Base): > __tablename__ = 'Sample' > __table_args__ = {'useexisting': True} > __metaclass__ = SampleMeta > > def __init__(self, id, name, description, is_active): > self.id = id > self.name = name > self.description = description > self.is_active = is_active > > def __repr__(self): > return "<(%d, '%s', '%s', %r)>" % (self.id, self.name, > self.description, self.isactive) > > And the error I am getting is this: > > TypeError: Error when calling the metaclass bases > metaclass conflict: the metaclass of a derived class must be a > (non-strict) subclass of the metaclasses of all its bases > > Now, if I do the same thing above by using > > class Sample(object) > > instead of > > class Sample(Base) > > it works absolutely fine. > > I need to update the attributes of the class dynamically. So, I will be > using dynamic attribute and column names. And I need the above piece code > to work in order to be able to get there.
I'm not an sqlalchemy user, but I'd try deriving your metaclass from Base's metaclass: BaseMeta = type(Base) class SampleMeta(BaseMeta): ... class Sample(Base): __metaclass__ = SampleMeta ... -- http://mail.python.org/mailman/listinfo/python-list