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:45 -0500
commit04da2878d1945dcf3ac074c386c9690ed380e672 (patch)
treeee93dcb4ead111f1dc9938184cc62a2f0db0ca1e
parent619793dc033a5f0097b6603f3854435baf177120 (diff)
downloadsqlalchemy-rel_0_9.tar.gz
Add missing disambiguation to non-primary mapper examplerel_0_9
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 (cherry picked from commit 16f08cbed5ff4f0f0b08dbd0dbd6e49aaee79163)
-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 0c48bbe82..6115df5b1 100644
--- a/doc/build/orm/join_conditions.rst
+++ b/doc/build/orm/join_conditions.rst
@@ -576,10 +576,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)