Create a join condition between two tables or selectables. See sqlalchemy.sql.util.join_condition() for full docs.
(
cls,
a: FromClause,
b: FromClause,
*,
a_subset: Optional[FromClause] = None,
consider_as_foreign_keys: Optional[
AbstractSet[ColumnClause[Any]]
] = None,
)
| 1455 | |
| 1456 | @classmethod |
| 1457 | def _join_condition( |
| 1458 | cls, |
| 1459 | a: FromClause, |
| 1460 | b: FromClause, |
| 1461 | *, |
| 1462 | a_subset: Optional[FromClause] = None, |
| 1463 | consider_as_foreign_keys: Optional[ |
| 1464 | AbstractSet[ColumnClause[Any]] |
| 1465 | ] = None, |
| 1466 | ) -> ColumnElement[bool]: |
| 1467 | """Create a join condition between two tables or selectables. |
| 1468 | |
| 1469 | See sqlalchemy.sql.util.join_condition() for full docs. |
| 1470 | |
| 1471 | """ |
| 1472 | constraints = cls._joincond_scan_left_right( |
| 1473 | a, a_subset, b, consider_as_foreign_keys |
| 1474 | ) |
| 1475 | |
| 1476 | if len(constraints) > 1: |
| 1477 | cls._joincond_trim_constraints( |
| 1478 | a, b, constraints, consider_as_foreign_keys |
| 1479 | ) |
| 1480 | |
| 1481 | if len(constraints) == 0: |
| 1482 | if isinstance(b, FromGrouping): |
| 1483 | hint = ( |
| 1484 | " Perhaps you meant to convert the right side to a " |
| 1485 | "subquery using alias()?" |
| 1486 | ) |
| 1487 | else: |
| 1488 | hint = "" |
| 1489 | raise exc.NoForeignKeysError( |
| 1490 | "Can't find any foreign key relationships " |
| 1491 | "between '%s' and '%s'.%s" |
| 1492 | % (a.description, b.description, hint) |
| 1493 | ) |
| 1494 | |
| 1495 | crit = [(x == y) for x, y in list(constraints.values())[0]] |
| 1496 | if len(crit) == 1: |
| 1497 | return crit[0] |
| 1498 | else: |
| 1499 | return and_(*crit) |
| 1500 | |
| 1501 | @classmethod |
| 1502 | def _can_join( |
no test coverage detected