- changed watchers to daqscott@ms.com
- changed status to resolved
override innerjoin=True on an outerjoin chain
Issue #1954
resolved
from sqlalchemy import (create_engine, Table, Column, Integer, MetaData,
ForeignKey, Sequence, String)
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import (sessionmaker, relation, backref, joinedload_all,
subqueryload_all)
engine = create_engine('sqlite://', echo=True)
Session = sessionmaker(bind=engine)
session = Session()
Base = declarative_base()
class A(Base):
__tablename__ = 'a'
id = Column(Integer, Sequence('a_seq'), primary_key=True)
name = Column(String)
class B(Base):
__tablename__ = 'b'
id = Column(Integer, Sequence('b_seq'), primary_key=True)
a_id = Column(Integer, ForeignKey('a.id'), nullable=False)
name = Column(String)
a = relation(A, innerjoin=True)
class C(Base):
__tablename__ = 'c'
id = Column(Integer, Sequence('c_seq'), primary_key=True)
name = Column(String)
b_id = Column(Integer, ForeignKey('b.a_id'))
b = relation(B)
Base.metadata.drop_all(engine)
Base.metadata.create_all(engine)
a = A(name="a")
session.add(a)
b = B(name="b", a=a)
session.add(b)
c1 = C(name="c1", b=b)
session.add(c1)
c2 = C(name="c2")
session.add(c2)
session.commit()
print "=============== No query loading hints =================="
q = session.query(C)
objects = q.all()
if len(objects) != 2:
print "\n\n****** Unexpected number of objects: %d\n\n" % len(objects)
print "=============== Using subqueryload_all() =================="
q = session.query(C)
q = q.options(subqueryload_all('b.a'))
objects = q.all()
if len(objects) != 2:
print "\n\n****** Unexpected number of objects: %d\n\n" % len(objects)
print "=============== Using joinedload_all() =================="
q = session.query(C)
q = q.options(joinedload_all('b.a'))
objects = q.all()
if len(objects) != 2:
print "\n\n****** Unexpected number of objects: %d\n\n" % len(objects)
Comments (2)
-
reporter -
reporter - removed milestone
Removing milestone: 0.6.6 (automated comment)
- Log in to comment
30bc42403754110df1fdec3037c7700cc4f26b70