MCPcopy
hub / github.com/sqlalchemy/sqlalchemy / test_multi_table_selectable

Method test_multi_table_selectable

test/orm/test_unitofwork.py:2094–2156  ·  view source on GitHub ↗

Mapped selectables that span tables. Also tests redefinition of the keynames for the column properties.

(self)

Source from the content-addressed store, hash-verified

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()

Callers

nothing calls this directly

Calls 15

fixture_sessionFunction · 0.90
eq_Function · 0.90
map_imperativelyMethod · 0.80
UserClass · 0.70
joinMethod · 0.45
addMethod · 0.45
flushMethod · 0.45
expunge_allMethod · 0.45
getMethod · 0.45
connectionMethod · 0.45
fetchallMethod · 0.45

Tested by

no test coverage detected