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 [email protected].
To post to this group, send email to [email protected].
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