Michael Bayer <mike...@zzzcomputing.com> writes: > http://www.sqlalchemy.org/docs/05/mappers.html?highlight=contains_eager#routing-explicit-joins-statements-into-eagerly-loaded-collections
Ok, that's embarrassing... I even recall skimming that section, but now looking at it can't for the life of me figure out why I skipped past it. Even if I didn't fully grok it the first paragraph obviously shows it is intended for my use case. Sigh. If I may ask for one clarification though - contains_eager is like eagerload and doesn't support working like eagerload_all, right? In other words, I need to add contain_eager options for each step through a multi-stage join, correct? I think that matches the behavior I'm seeing, but the example in the documentation that showed Users->orders->Order->items->Item seemed to imply it wouldn't be necessary. For example, with these mappings/relationships: class ClassPeriod(object): pass class Class_(object): pass class Session(object): pass class Weekday(object): pass mapper(ClassPeriod, 'class_periods', autoload=True, properties = { 'class_': relation(Class_, backref='periods'), 'weekday_': relation(Weekday, lazy=False) }) mapper(Class_, 'classes', autoload=True, properties = { 'session': relation(Session, backref='classes'), 'type': relation(ClassType, backref='classes') }) mapper(Session, 'sessions' autoload=True) mapper(Weekday, 'weekday', autoload=True) then a query like: query(ClassPeriod).join(Class_, Session).\ options(contains_eager('class_','session')) doesn't seem to perform the eager loading: SELECT class_periods.class_id AS class_periods_class_id, class_periods.weekday AS class_periods_weekday, class_periods.start_time AS class_periods_start_time, class_periods.duration AS class_periods_duration, weekdays_1.weekday AS weekdays_1_weekday, weekdays_1.day AS weekdays_1_day FROM class_periods JOIN classes ON classes.class_id = class_periods.class_id JOIN sessions ON sessions.session_id = classes.session_id LEFT OUTER JOIN weekdays AS weekdays_1 ON weekdays_1.weekday = class_periods.weekday but if I add the intermediate class_ relationship: query(ClassPeriod).join(Class_, Session).\ options(contains_eager('class_'), contains_eager('class_','session')) then it adds both the classes.* and sessions.* columns for eager loading: SELECT sessions.session_id AS sessions_session_id, sessions.site_id AS sessions_site_id, sessions.name AS sessions_name, sessions.start_date AS sessions_start_date, sessions.end_date AS sessions_end_date, classes.class_id AS classes_class_id, classes.session_id AS classes_session_id, classes.class_type_id AS classes_class_type_id, classes.start_date AS classes_start_date, classes.end_date AS classes_end_date, classes.capacity AS classes_capacity, classes.overfill AS classes_overfill, class_periods.class_id AS class_periods_class_id, class_periods.weekday AS class_periods_weekday, class_periods.start_time AS class_periods_start_time, class_periods.duration AS class_periods_duration, weekdays_1.weekday AS weekdays_1_weekday, weekdays_1.day AS weekdays_1_day FROM class_periods JOIN classes ON classes.class_id = class_periods.class_id JOIN sessions ON sessions.session_id = classes.session_id LEFT OUTER JOIN weekdays AS weekdays_1 ON weekdays_1.weekday = class_periods.weekday Given the above, I'm not sure how the Users/Order/Item example, which only had the single "contains_eager('orders','items')" would works? Thanks. -- David --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "sqlalchemy" group. 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 -~----------~----~----~----~------~----~------~--~---