diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2018-12-28 09:33:07 -0500 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2018-12-28 09:36:45 -0500 |
commit | 04da2878d1945dcf3ac074c386c9690ed380e672 (patch) | |
tree | ee93dcb4ead111f1dc9938184cc62a2f0db0ca1e | |
parent | 619793dc033a5f0097b6603f3854435baf177120 (diff) | |
download | sqlalchemy-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.rst | 16 |
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) |