On 2 Apr 2014, at 20:53, Jonathan Vanasco <jonat...@findmeon.com> wrote:

> I'm calling this "eagerloading" , but it's not the right term...
> 
> I have an object that is already loaded...
> 
>     user = dbSession.query( model.User ).filter_by( id = 1 ).first()
> 
> over time it's seen a handful of relationships grow...
> 
>     user = dbSession.query( model.User ).filter_by( id = 1 )\
>                 .options(\
>                     joinedload('foo') ,
>                     joinedload('foo.bar') ,
>                     joinedload('biz') ,
>                     joinedload('biz.bash') ,
>                 )\
> 
> profiling some code, I don't need to eagerload everything anymore.  
> 
> I'd like to try and select the least amount of data at first, then select 
> more as needed.
> 
> i know for single-level items I can just hit the property as `User.foo` and 
> for collections i can do  `list( User.foo )`
> 
> but are there good ways to handle relationships like `User.foo.bar` ?
> 
> My goal is to load all the data for the named relationships at once.  I don't 
> want to iterate through rows or leave a db cursor open. 
> 

One way to do it might simply be to re-query for the object, with the new eager 
load options. As far as I can tell from a quick experiment, this will populate 
the attributes that you ask to be eagerly loaded without touching the others.

ie.

  user = dbSession.query(model.User).get(1)

  # later...
  # (note: must not use .get(), to skip the identity map)
  user = (dbSession.query(model.User)
          .filter_by(id=1)
          .options(joinedload('foo'),
                   joinedload('foo.bar'))
          .first())

This will join to the User table and fetch all its columns - I don't know if 
there's an easy way to avoid that.

Simon

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