[Sqlalchemy-tickets] [sqlalchemy] #2670: declared_attr with abstractconcretebase
Brought to you by:
zzzeek
From: sqlalchemy <mi...@zz...> - 2013-02-28 02:47:15
|
#2670: declared_attr with abstractconcretebase -------------------------+------------------------------------ Reporter: zzzeek | Owner: chrisw Type: defect | Status: new Priority: high | Milestone: 0.8.xx Component: declarative | Severity: major - 1-3 hours Keywords: | Progress State: in queue -------------------------+------------------------------------ because it's not mapped up front @declared_attr isn't evaluated as expected. might need the plugin to run them again. {{{ #!python from sqlalchemy import * from sqlalchemy.orm import * from sqlalchemy.ext.declarative import (declarative_base, declared_attr, AbstractConcreteBase) engine = create_engine('sqlite://', echo=True) Base = declarative_base() class Something(Base): __tablename__ = u'something' id = Column(Integer, primary_key=True) class AbstractConcreteAbstraction(AbstractConcreteBase, Base): id = Column(Integer, primary_key=True) derpa = Column(Integer) derp = Column(Integer) @declared_attr def something_id(cls): return Column(ForeignKey(Something.id)) @declared_attr def something(cls): return relationship(Something) class ConcreteConcreteAbstraction(AbstractConcreteAbstraction): __tablename__ = u'cca' __mapper_args__ = {'polymorphic_identity': 'ccb', 'concrete': True} Base.metadata.create_all(engine) session = Session(engine) print session.query(ConcreteConcreteAbstraction).filter( ConcreteConcreteAbstraction.something.has(id=1)).all() # workaround needed # AbstractConcreteAbstraction.something = relationship(Something) print session.query(AbstractConcreteAbstraction).filter( AbstractConcreteAbstraction.something.has(id=1)).all() }}} -- Ticket URL: <http://www.sqlalchemy.org/trac/ticket/2670> sqlalchemy <http://www.sqlalchemy.org/> The Database Toolkit for Python |