Mapped selectables that span tables. Also tests redefinition of the keynames for the column properties.
(self)
| 2092 | self.sql_count_(0, session.flush) |
| 2093 | |
| 2094 | def test_multi_table_selectable(self): |
| 2095 | """Mapped selectables that span tables. |
| 2096 | |
| 2097 | Also tests redefinition of the keynames for the column properties. |
| 2098 | |
| 2099 | """ |
| 2100 | |
| 2101 | addresses, users, User = ( |
| 2102 | self.tables.addresses, |
| 2103 | self.tables.users, |
| 2104 | self.classes.User, |
| 2105 | ) |
| 2106 | |
| 2107 | usersaddresses = sa.join( |
| 2108 | users, addresses, users.c.id == addresses.c.user_id |
| 2109 | ) |
| 2110 | |
| 2111 | m = self.mapper_registry.map_imperatively( |
| 2112 | User, |
| 2113 | usersaddresses, |
| 2114 | properties=dict( |
| 2115 | email=addresses.c.email_address, |
| 2116 | foo_id=[users.c.id, addresses.c.user_id], |
| 2117 | ), |
| 2118 | ) |
| 2119 | |
| 2120 | u = User(name="multitester", email="multi@test.org") |
| 2121 | session = fixture_session() |
| 2122 | session.add(u) |
| 2123 | session.flush() |
| 2124 | session.expunge_all() |
| 2125 | |
| 2126 | id_ = m.primary_key_from_instance(u) |
| 2127 | |
| 2128 | u = session.get(User, id_) |
| 2129 | assert u.name == "multitester" |
| 2130 | |
| 2131 | conn = session.connection() |
| 2132 | user_rows = conn.execute( |
| 2133 | users.select().where(users.c.id.in_([u.foo_id])) |
| 2134 | ).fetchall() |
| 2135 | eq_(list(user_rows[0]), [u.foo_id, "multitester"]) |
| 2136 | address_rows = conn.execute( |
| 2137 | addresses.select().where(addresses.c.id.in_([u.id])) |
| 2138 | ).fetchall() |
| 2139 | eq_(list(address_rows[0]), [u.id, u.foo_id, "multi@test.org"]) |
| 2140 | |
| 2141 | u.email = "lala@hey.com" |
| 2142 | u.name = "imnew" |
| 2143 | session.flush() |
| 2144 | |
| 2145 | user_rows = conn.execute( |
| 2146 | users.select().where(users.c.id.in_([u.foo_id])) |
| 2147 | ).fetchall() |
| 2148 | eq_(list(user_rows[0]), [u.foo_id, "imnew"]) |
| 2149 | address_rows = conn.execute( |
| 2150 | addresses.select().where(addresses.c.id.in_([u.id])) |
| 2151 | ).fetchall() |
nothing calls this directly
no test coverage detected