mapper.order_by incorrectly placed with subqueryload

Issue #2287 resolved
Mike Bayer repo owner created an issue
import sqlalchemy as sa
import sqlalchemy.orm as saorm

from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class Master(Base):
   __tablename__ = 'master'
   id = sa.Column(sa.Integer, primary_key=True, autoincrement=True)
   dummy = sa.Column(sa.Integer)
   __mapper_args__ = {'order_by': sa.desc(id)}

class Detail(Base):
   __tablename__ = 'detail'
   id = sa.Column(sa.Integer, primary_key=True, autoincrement=True)
   master_id = sa.Column(sa.Integer, sa.ForeignKey(Master.id))
   master = saorm.relationship(Master, backref='details')

def test():
   dburi = 'sqlite://'
   engine = sa.create_engine(dburi, echo=True)
   Base.metadata.drop_all(bind=engine)
   Base.metadata.create_all(bind=engine)
   session = saorm.create_session(bind=engine)

   session.begin()
   # Insert 5 masters, each with 1 detail
   for i in range(5):
       master = Master(dummy=i)
       master.details.append(Detail())
       session.add(master)
   session.commit()
   session.close()

   # Load back 2 masters, using subqueryload to load the detail
   # rows. If you uncomment the '.order_by' line here, the test
   # passes.
   master_query = (session.query(Master)
                   #.order_by(sa.desc(Master.id))
                   .limit(2)
                   .options(saorm.subqueryload('details')))

   # Display the details for each master
   for item in master_query:
       print 'Master %s: %s' % (item.id, item.details),
       if len(item.details) == 0:
           print 'FAIL'
       else:
           print 'PASS'

if __name__ == '__main__':
   test()

Comments (2)

  1. Log in to comment