
Hi Marc
Example why it matters: schools - 1:n - teachers - 1:n - pupils
If you want to list all schools which have a pupil with age > 3 you'd write an sql query like this:
SELECT dictinct * FROM schools as s JOIN teachers t ON (t.school_id = s.id) JOIN pupils as p ON (p.teacher_id = t.id) WHERE p.age > 3
in SQLAlchemy it looks like this: session.query(School).join(School.teachers).join(Teacher.pupils).filter(Pupil.age > 3).all()
difference? Because SQLAlchemy knows about the relations you don't have to remember alias names. So there is no chance to get that wrong.
I do not get this explanation, could you expand? I would have thought it should be: "difference? Because SQLAlchemy knows about the relationships (not relations, but relation_ships_), it do not have to explicitly join on foreign keys.". Actually SQL has natural joins, where you can do without explicit join conditions. Unfortunately, natural joins seems like they were explicitly designed to create trouble. It would be nice if "they" fixed SQL to consider relationships. Greetings, Mads Lindstrøm