simpler, just stick the relationship on ACA:

session = Session(engine)
print session.query(ConcreteConcreteAbstraction).filter(
        ConcreteConcreteAbstraction.something.has(id=1)).all()

AbstractConcreteAbstraction.something = relationship(Something)
print session.query(AbstractConcreteAbstraction).filter(
        AbstractConcreteAbstraction.something.has(id=1)).all()



On Feb 27, 2013, at 9:41 PM, Michael Bayer <mike...@zzzcomputing.com> wrote:

> just features that weren't anticipated (I never use concrete inheritance).    
> here's what will work for now.
> 
> class AbstractConcreteAbstraction(AbstractConcreteBase, sqlite):
>     __table_args__ = (UniqueConstraint('derpa',
>         'derp'),)
>     id = Column(Integer, primary_key=True)
>     derpa = Column(Integer)
>     derp = Column(Integer)
> 
>     @declared_attr
>     def something_id(cls):
>         return Column(ForeignKey(Something.id))
> 
> class ConcreteConcreteAbstraction(AbstractConcreteAbstraction):
>     __tablename__ = u'cca'
>     __mapper_args__ = {'polymorphic_identity': 'ccb',
>         'concrete': True}
> 
>     something = relationship(Something)
> 
> import sqlalchemy
> sqlalchemy.orm.configure_mappers()
> 
> AbstractConcreteAbstraction.something = relationship(Something)
> 
> sqlite.metadata.create_all()
> 
> # Works
> print session.query(ConcreteConcreteAbstraction).filter(
>         ConcreteConcreteAbstraction.something.has(id=1)).all()
> # Don't work
> print session.query(AbstractConcreteAbstraction).filter(
>         AbstractConcreteAbstraction.something.has(id=1)).all()
> 
> 
> 
> On Feb 27, 2013, at 8:06 PM, Derek Litz <litzoma...@gmail.com> wrote:
> 
>> Having fun with AbstractBaseClasses tonight :) ... Anyways am I missing 
>> something here as well?
>> 
>> I tried playing with querying the AbstractBaseClass and filtering on sub 
>> classes but that just produced
>> a query that did not execute.
>> 
>> from sqlalchemy.engine import Engine
>> from sqlalchemy import event
>> from sqlalchemy import (Column, Integer, Unicode, DateTime, ForeignKey,
>>     Boolean, Numeric, Time)
>> 
>> 
>> # Taken from http://docs.sqlalchemy.org/ru/latest/dialects/sqlite.html
>> @event.listens_for(Engine, "connect")
>> def set_sqlite_pragma(dbapi_connection, connection_record):
>>     cursor = dbapi_connection.cursor()
>>     cursor.execute("PRAGMA foreign_keys=ON")
>>     cursor.close()
>> 
>> 
>> from sqlalchemy import create_engine
>> from sqlalchemy.ext.declarative import (declarative_base, declared_attr,
>>     AbstractConcreteBase)
>> from sqlalchemy.orm import sessionmaker, relationship, backref, 
>> object_session
>> 
>> engine = create_engine('sqlite:///test.db')
>> sqlite = declarative_base(bind=engine)
>> get_session = sessionmaker(bind=engine)
>> session = get_session()
>> 
>> from sqlalchemy.schema import UniqueConstraint
>> 
>> 
>> class Something(sqlite):
>>     __tablename__ = u'something'
>>     id = Column(Integer, primary_key=True)
>> 
>> 
>> class AbstractConcreteAbstraction(AbstractConcreteBase, sqlite):
>>     __table_args__ = (UniqueConstraint('derpa',
>>         'derp'),)
>>     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}
>> 
>> 
>> import sqlalchemy
>> sqlalchemy.orm.configure_mappers()
>> sqlite.metadata.create_all()
>> 
>> # Works
>> print session.query(ConcreteConcreteAbstraction).filter(
>>         ConcreteConcreteAbstraction.something.has(id=1)).all()
>> # Don't work
>> print session.query(AbstractConcreteAbstraction).filter(
>>         AbstractConcreteAbstraction.something.has(id=1)).all()
>> 
>> 
>> -- 
>> 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?hl=en.
>> For more options, visit https://groups.google.com/groups/opt_out.
>>  
>>  
> 
> 
> -- 
> 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?hl=en.
> For more options, visit https://groups.google.com/groups/opt_out.
>  
>  

-- 
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?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to