Sorry, it should've been:

class Enum_Sample(Base):

Typo.


On Mon, Aug 26, 2013 at 4:35 PM, Praveen <praveen.venk...@gmail.com> wrote:

> 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 !!!
>



-- 
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.

Reply via email to