With this code:

from sqlalchemy.ext.declarative import declarative_base, declared_attr
from sqlalchemy.schema import Column
from sqlalchemy.types import Integer, String

Base = declarative_base()


class Mixin(object):
    @declared_attr
    def attr2(cls):
        return Column(String(20), nullable=False)


class Test(Base, Mixin):
    __tablename__ = 'test'

    id = Column(Integer, primary_key=True)

    @declared_attr
    def attr1(cls):
        return Column(String(20), nullable=False)


if __name__ == '__main__':
    print Test.attr1.__class__
    print Test.attr2.__class__


Test.attr1 will be a sqlalchemy.schema.Column, while Test.attr2 will
be a sqlalchemy.orm.attributes.InstrumentedAttribute. Why are they
behave differently?

Anyway, what I want to achieve is to selectively define a column based
on some external flag, so I was trying to put in if..else block inside
@declared_attr to return either None or Column. Is there a better way
to do it, e.g. using a metaclass?

Thanks.

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to sqlalchemy@googlegroups.com.
To unsubscribe from this group, send email to 
sqlalchemy+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en.

Reply via email to