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:24 -0500 |
| commit | 16f08cbed5ff4f0f0b08dbd0dbd6e49aaee79163 (patch) | |
| tree | 05041b1350a2d49457c4f0209da7a517b5f59d18 | |
| parent | ec5c9ebe6e7b8822de0c7bd19aea11ea2a582e29 (diff) | |
| download | sqlalchemy-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.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 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) |
