Hi,

We've used joined table inheritance up to this point, but performance 
issues are making us explore single table inheritance. I'm running into a 
problem with mapper configuration. Using SQLAlchemy 0.7.8, Flask-SQLAlchemy 
0.16, and Flask 0.8. Here is the inheritance: 

class Community(BaseModel, db.Model):
   # Bar

class Group(Community):
    ###
        Group utilized joined table inheritance to extend Community
    ###
    id  = db.Column(db.Integer, db.ForeignKey('community.id'), 
primary_key=True, nullable=False)
    autocreated = db.Column(db.Boolean, nullable=False, default=False)

    @declared_attr
        def __mapper_args__(cls):
            name = cls._name()
            identity = {
                'polymorphic_on': case([
                    (cls.autocreated == True, "autocreated_group"),
                    (cls.autocreated == False, "group")
                ]),
                'polymorphic_identity': name
            }
            return identity

class AutocreatedGroup(Group):
    ###
        AutocreatedGroup extends Group through joined table inheritance
    ###
    id = db.Column(db.Integer, db.ForeignKey('group.id'), primary_key=True, 
\
        nullable=False)
    
    @declared_attr
    def __mapper_args__(cls):
        name = cls._name()
        identity = {
            'polymorphic_on': cls.autocreated_type,
            'polymorphic_identity': name
        }
        return identity

class TopicAutocreatedGroup(AutocreatedGroup):
    ###
        TopicAutocreatedGroup extends AutocreatedGroup through single table 
inheritance
    ###
    @declared_attr
    def __mapper_args__(cls):
        return {'polymorphic_identity': cls._name()}

    topic_created_from_id = db.Column(
        db.Integer,
        db.ForeignKey('topic.id'),
        nullable = True
    )
    topic_created_from = db.relation(
        "Topic",
        primaryjoin="Topic.id == 
TopicAutocreatedGroup.topic_created_from_id",
        backref=db.backref("topic_groups", uselist=True),
        uselist=False, lazy='subquery'
    )

Here is the stacktrace: 
Traceback (most recent call last):
  File "/srv/.env/lib/python2.6/site-packages/flask/app.py", line 1518, in 
__call__
    return self.wsgi_app(environ, start_response)
  File "/srv/.env/lib/python2.6/site-packages/flask/app.py", line 1506, in 
wsgi_app
    response = self.make_response(self.handle_exception(e))
  File "/srv/.env/lib/python2.6/site-packages/flask/app.py", line 1504, in 
wsgi_app
    response = self.full_dispatch_request()
  File "/srv/.env/lib/python2.6/site-packages/flask/app.py", line 1264, in 
full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/srv/.env/lib/python2.6/site-packages/flask/app.py", line 1260, in 
full_dispatch_request
    rv = self.preprocess_request()
  File "/srv/.env/lib/python2.6/site-packages/flask/app.py", line 1387, in 
preprocess_request
    rv = func()
  File "/srv/franklin-api/api/helpers/login_manager.py", line 53, in 
_load_user
    user = User.for_auth_token(token)
  File "/srv/franklin-api/api/models/user.py", line 584, in for_auth_token
    user_for_token = cls.query.filter(cls.auth_token == auth_token).first()
  File "/srv/.env/lib/python2.6/site-packages/flask_sqlalchemy.py", line 
394, in __get__
    mapper = orm.class_mapper(type)
  File "/srv/.env/lib/python2.6/site-packages/sqlalchemy/orm/util.py", line 
660, in class_mapper
    mapperlib.configure_mappers()
  File "/srv/.env/lib/python2.6/site-packages/sqlalchemy/orm/mapper.py", 
line 2255, in configure_mappers
    raise e
InvalidRequestError: One or more mappers failed to initialize - can't 
proceed with initialization of other mappers.  Original exception was: 
Class <class 'api.models.autocreated_group.TopicAutocreatedGroup'> does not 
have a mapped column named 'topic_created_from_id'


It appears the Columns inside classes that inherit through single table 
inheritance are not included in the mapper. Any idea of what may be going 
wrong?

Thank you,
Kuba

P.S. What should __mapper_args__ look like for AutocreatedGroup? Should 
"topic_created_from_id" be automatically included in the 
"excluded_properties" value? Currently, it's empty if I print it out. 

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/sqlalchemy/-/l3a-3tBjaf4J.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en.

Reply via email to