it can be done with some API tinkering and I totally wrote this up for someone 
recently, and cannot find it.

This is not a public thing and isn't covered by tests, however this should be a 
first class feature, if someone wants to work on it or propose a ticket or 
whatnot.  The intricate part is sending the right kind of load option at the 
end, here's a simple one.

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

Base = declarative_base()

class A(Base):
    __tablename__ = 'a'

    id = Column(Integer, primary_key=True)
    bs = relationship("B")

class B(Base):
    __tablename__ = 'b'

    id = Column(Integer, primary_key=True)
    a_id = Column(Integer, ForeignKey('a.id'))
    cs = relationship("C")

class C(Base):
    __tablename__ = 'c'

    id = Column(Integer, primary_key=True)
    b_id = Column(Integer, ForeignKey('b.id'))

e = create_engine("sqlite://", echo=True)
Base.metadata.create_all(e)

sess = Session(e)
sess.add_all([
    A(bs=[
        B(cs=[C(), C()]),
        B(cs=[C(), C()])
    ])
])
sess.commit()

a1 = sess.query(A).first()
inspect(a1).load_options = inspect(a1).load_options.union([joinedload(B.cs)])

for b in a1.bs:
    print b.cs



On Apr 28, 2014, at 1:08 PM, Jonathan Vanasco <jonat...@findmeon.com> wrote:

> I'm not sure if there is a trick to do this or not, but it's worth asking...
> 
> I have an object that has been loaded into the Session, as per whatever 
> eager-loading requirements :
> 
>     foo = dbSession.query( Foo ).filter(...).options(...).one()
> 
> 
> I'm now in a position where I need to access Foo.bar and Foo.bar.baz
> 
>     for bar in foo.bar :
>        print foo.bar.baz.id
> 
> 
> Is there a way to eagerload foo.bar and foo.bar.baz into the already-loaded 
> `foo` ?
> 
> I'd prefer not to re-query for `foo` with different attributes, because it 
> was loaded elsewhere with some specific needs.  i just want to tell it to 
> eagerload this collection/depth.
> 
> 
> 
> 
> -- 
> 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.

-- 
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