summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/sql/util.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/sqlalchemy/sql/util.py')
-rw-r--r--lib/sqlalchemy/sql/util.py11
1 files changed, 8 insertions, 3 deletions
diff --git a/lib/sqlalchemy/sql/util.py b/lib/sqlalchemy/sql/util.py
index 757de37c4..997fedade 100644
--- a/lib/sqlalchemy/sql/util.py
+++ b/lib/sqlalchemy/sql/util.py
@@ -217,7 +217,9 @@ def join_condition(a, b, ignore_nonexistent_tables=False, a_subset=None):
for left in (a_subset, a):
if left is None:
continue
- for fk in b.foreign_keys:
+ for fk in sorted(
+ b.foreign_keys,
+ key=lambda fk:fk.parent._creation_order):
try:
col = fk.get_referent(left)
except exc.NoReferencedTableError:
@@ -230,7 +232,9 @@ def join_condition(a, b, ignore_nonexistent_tables=False, a_subset=None):
crit.append(col == fk.parent)
constraints.add(fk.constraint)
if left is not b:
- for fk in left.foreign_keys:
+ for fk in sorted(
+ left.foreign_keys,
+ key=lambda fk:fk.parent._creation_order):
try:
col = fk.get_referent(b)
except exc.NoReferencedTableError:
@@ -247,7 +251,8 @@ def join_condition(a, b, ignore_nonexistent_tables=False, a_subset=None):
if len(crit) == 0:
if isinstance(b, expression._FromGrouping):
- hint = " Perhaps you meant to convert the right side to a subquery using alias()?"
+ hint = " Perhaps you meant to convert the right side to a "\
+ "subquery using alias()?"
else:
hint = ""
raise exc.ArgumentError(