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 <[email protected]> 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 [email protected].
> To post to this group, send email to [email protected].
> 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 [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.