I want to avoid double joining on the same table. I know query._from_obj is 
where the query stores the join elements. However, it's not there if the 
join is from query.options(joinedload('some_relation')). For example, I 
have the following table relations:

User:
* userid
* name

Thing
* thingid
* name
* userid

Thing.user = relation(User, User.userid==Thing.userid)

If I call:

query = 
session.query(Thing).options(joinedload('user')).filter(User.name=='blah').all()

This will generate the following query:
SELECT thing.thingid, thing.name, thing.userid, user1.userid, user1.name
FROM thing INNER JOIN user AS user1
INNER JOIN user
WHERE user.name == 'blah'

Notice the double join there.

Now, I wouldn't do that if I'm writing the query in a single function, but 
if the code is modular, the child object loading and filtering is done in 
separate functions, with the query being passed around. Is there a way for 
me to detect whether a query already has a join on a certain table, whether 
the join is from query.join() or query.options(joinedload(x))?

Any suggestion is welcome and appreciated.

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/sqlalchemy/-/oFfq3pWQm5wJ.
To post to this group, send email to sqlalchemy@googlegroups.com.
To unsubscribe from this group, send email to 
sqlalchemy+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en.

Reply via email to