@mjallday Thank you, I have some practices are from the elder version of SQLAlchemy. 

Hum.. seems changed since 7.0
http://docs.sqlalchemy.org/en/rel_0_8/orm/query.html?highlight=join#sqlalchemy.orm.query.Query.join


> Changed in version 0.7: In SQLAlchemy 0.6 and earlier, the two argument form of join() requires the usage of a tuple: query(User).join((Address, User.id==Address.user_id)). This calling form is accepted in 0.7 and further, though is not necessary unless multiple join conditions are passed to a single join() call, which itself is also not generally necessary as it is now equivalent to multiple calls (this wasn’t always the case).

As the API has been changed, if you see any other old approaches can be updated like this, please let me know. Thanks again.