Sorry to be asking more questions, but the docs on inheritance don't get 
into much details on how the properties are supposed to work.
The following code produces unexpected results:

from sqlalchemy import *
from sqlalchemy.orm import *
from sqlalchemy.ext.declarative import AbstractConcreteBase, 
declarative_base

Base = declarative_base()


class Document(Base, AbstractConcreteBase):
    doctype = Column('doc_type', Unicode, nullable=False)


class ActualDocument(Document):
    __tablename__ = 'actual_documents'
    __mapper_args__ = {'concrete': True, 'polymorphic_identity': 'actual'}

    id = Column(Integer, primary_key=True)
    name = Column('name_', Unicode)

configure_mappers()

for prop in class_mapper(Document).column_attrs:
    print('%s (%s)' % (prop, prop.__class__.__name__))

for prop in class_mapper(ActualDocument).column_attrs:
    print('%s (%s)' % (prop, prop.__class__.__name__))

Which gives me:

Document.doc_type (ColumnProperty)
Document.id (ColumnProperty)
Document.name_ (ColumnProperty)
Document.type (ColumnProperty)
ActualDocument.doctype (ColumnProperty)
ActualDocument.name (ColumnProperty)
ActualDocument.id (ColumnProperty)

I can understand Document.id (which comes from ActualDocument) and 
Document.type (which I assume is the polymorphic identity) but doc_type 
seems wrong to me. Why are doc_type and name_ not named doctype and name 
respectively, like they are on ActualDocument? Is this a bug? Am I right in 
guessing that the polymorphic union simply lacks the proper labels where 
the column name differs from the attribute name?

-- 
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.
For more options, visit https://groups.google.com/d/optout.

Reply via email to