The problem with using Mixins is that you need to know the definition of columns already for creating the mixin class. What I am trying to do is more like get the definition dynamically on the fly.Take a look at this:
def get_properties(tablename, map): table_inspector = reflection.Inspector.from_engine(DB_ENGINE.connect()) table = Table(tablename, metadata) table_inspector.reflecttable(table, None) columns = [] for child in table.get_children(): if isinstance(child, Column): column = list(child.base_columns)[0] column.table = None columns.append(column) return dict([(map[column.key], column) for column in columns]) class CustomDeclarativeMeta(DeclarativeMeta): def __new__(cls, name, bases, attrs): attrs.update(get_properties(attrs.get('__tablename__'), attrs.get('__map__'))) return super(CustomDeclarativeMeta, cls).__new__(cls, name, bases, attrs) # Base = declarative_base(metaclass=CustomDeclarativeMeta) Base = declarative_base() class Enum_SampleBase): __tablename__ = 'Enum_Sample' __table_args__ = {'useexisting': True} __metaclass__ = CustomDeclarativeMeta __map__ = {'Id': 'id', 'Name': 'name', 'Description': 'description', 'IsActive': 'is_active'} 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) Unfortunately, this isn't working. I want to declare column types by getting them from a table that's already created in the database. On Wed, Jul 3, 2013 at 11:11 AM, Michael Bayer <mike...@zzzcomputing.com>wrote: > your metaclass must derive from the DeclarativeMeta class. > > Also, I disagree that you need this metaclass, what you're trying to do > is very easy using mixins, which are supported in version 0.6: > http://docs.sqlalchemy.org/en/rel_0_6/orm/extensions/declarative.html#mixing-in-columns > > > > > On Jul 3, 2013, at 12:44 AM, Ven Karri <praveen.venk...@gmail.com> 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. > > **Please help** > > -- > You received this message because you are subscribed to the Google Groups > "sqlalchemy" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to sqlalchemy+unsubscr...@googlegroups.com. > > To post to this group, send email to sqlalchemy@googlegroups.com. > Visit this group at http://groups.google.com/group/sqlalchemy. > For more options, visit https://groups.google.com/groups/opt_out. > > > > > -- > You received this message because you are subscribed to a topic in the > Google Groups "sqlalchemy" group. > To unsubscribe from this topic, visit > https://groups.google.com/d/topic/sqlalchemy/37M-1Qf8HO8/unsubscribe. > To unsubscribe from this group and all its topics, send an email to > sqlalchemy+unsubscr...@googlegroups.com. > To post to this group, send email to sqlalchemy@googlegroups.com. > Visit this group at http://groups.google.com/group/sqlalchemy. > For more options, visit https://groups.google.com/groups/opt_out. > > > -- Have a nice day !!! -- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To unsubscribe from this group and stop receiving emails from it, send an email to sqlalchemy+unsubscr...@googlegroups.com. To post to this group, send email to sqlalchemy@googlegroups.com. Visit this group at http://groups.google.com/group/sqlalchemy. For more options, visit https://groups.google.com/groups/opt_out.