Hi, [trying to send this again, seems like previous copy got lost in some moderation queue]
Messing with single-table inheritance in a declarative model, with a non-abstract base class, I find that querying fails if polymorphic_identity is 0 (zero). Example: ################ code begins ################ from sqlalchemy import Column, Integer, create_engine from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker Base = declarative_base() class Course(Base): __tablename__ = 'course' id = Column(Integer, primary_key=True) course_type = Column(Integer) __mapper_args__ = {'polymorphic_on':course_type, 'polymorphic_identity':0} class MultiYearCourse(Course): __mapper_args__ = {'polymorphic_identity':1} engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(bind=engine) session = sessionmaker(bind=engine)() myc = MultiYearCourse() myc.name = u"Computer Graphics" c = Course() c.name = u"Sociology" session.add(c) session.add(myc) session.commit() print "MYC: %s" % myc print "C: %s" % c query = session.query(Course) print "Query: %s" % query print "Results: %s" % query.all() ################ code ends ################ That last line fails with an AssertionError: ################ output begins ################ MYC: <__main__.MultiYearCourse object at 0xcf7d30> C: <__main__.Course object at 0xcf7d70> Query: SELECT course.id AS course_id, course.course_type AS course_course_type FROM course Traceback (most recent call last): File "/Users/gthb/Documents/workspace/test/src/sqlalchemytest.py", line 31, in <module> print "Results: %s" % query.all() File "/Users/gthb/Library/Python/2.5/site-packages/SQLAlchemy-0.5.2-py2.5.egg/sqlalchemy/orm/query.py", line 1186, in all return list(self) File "/Users/gthb/Library/Python/2.5/site-packages/SQLAlchemy-0.5.2-py2.5.egg/sqlalchemy/orm/query.py", line 1341, in instances rows = [process[0](context, row) for row in fetch] File "/Users/gthb/Library/Python/2.5/site-packages/SQLAlchemy-0.5.2-py2.5.egg/sqlalchemy/orm/query.py", line 1942, in main return _instance(row, None) File "/Users/gthb/Library/Python/2.5/site-packages/SQLAlchemy-0.5.2-py2.5.egg/sqlalchemy/orm/mapper.py", line 1557, in _instance _instance = polymorphic_instances[discriminator] File "/Users/gthb/Library/Python/2.5/site-packages/SQLAlchemy-0.5.2-py2.5.egg/sqlalchemy/util.py", line 71, in __missing__ self[key] = val = self.creator(key) File "/Users/gthb/Library/Python/2.5/site-packages/SQLAlchemy-0.5.2-py2.5.egg/sqlalchemy/orm/mapper.py", line 1695, in configure_subclass_mapper raise AssertionError("No such polymorphic_identity %r is defined" % discriminator) AssertionError: No such polymorphic_identity 0 is defined ################ output ends ################ But if I exchange the polymorphic identities, so the base class gets the 1 and the subclass gets the 0, then it runs just fine! It seems to me that this can't be intentional — don't see a reason for it, and the docs do not mention any particular restrictions on values of polymorphic_identity. Regards, - Gulli --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To post to this group, send email to sqlalchemy@googlegroups.com To unsubscribe from this group, send email to sqlalchemy+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en -~----------~----~----~----~------~----~------~--~---