summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2018-12-28 09:33:07 -0500
committerMike Bayer <mike_mp@zzzcomputing.com>2018-12-28 09:36:24 -0500
commit16f08cbed5ff4f0f0b08dbd0dbd6e49aaee79163 (patch)
tree05041b1350a2d49457c4f0209da7a517b5f59d18
parentec5c9ebe6e7b8822de0c7bd19aea11ea2a582e29 (diff)
downloadsqlalchemy-16f08cbed5ff4f0f0b08dbd0dbd6e49aaee79163.tar.gz
Add missing disambiguation to non-primary mapper example
The mapping to B over a join defines an alternate primary key based on all the primary key columns in the join unless we re-define it explicitly. Similarly, people expect that ``.id`` looks the same. make sure these line up with the old mapping. Change-Id: I1ab064c57019e79c34293f6588d1e033f7083974
-rw-r--r--doc/build/orm/join_conditions.rst16
1 files changed, 12 insertions, 4 deletions
diff --git a/doc/build/orm/join_conditions.rst b/doc/build/orm/join_conditions.rst
index 8b9d56b33..9044f2aca 100644
--- a/doc/build/orm/join_conditions.rst
+++ b/doc/build/orm/join_conditions.rst
@@ -699,10 +699,18 @@ the rows in both ``A`` and ``B`` simultaneously::
# 2. Create a new mapper() to B, with non_primary=True.
# Columns in the join with the same name must be
# disambiguated within the mapping, using named properties.
- B_viacd = mapper(B, j, non_primary=True, properties={
- "b_id": [j.c.b_id, j.c.d_b_id],
- "d_id": j.c.d_id
- })
+ # we also have to make sure the primary key of the regular "B"
+ # mapping is maintained.
+ B_viacd = mapper(
+ B, j, non_primary=True, primary_key=[j.c.b_id],
+ properties={
+ "id": j.c.b_id, # so that 'id' looks the same as before
+ "c_id": j.c.c_id, # needed for disambiguation
+ "d_c_id": j.c.d_c_id, # needed for disambiguation
+ "b_id": [j.c.b_id, j.c.d_b_id],
+ "d_id": j.c.d_id,
+ }
+ )
A.b = relationship(B_viacd, primaryjoin=A.b_id == B_viacd.c.b_id)