summaryrefslogtreecommitdiff
path: root/test/orm/test_query.py
diff options
context:
space:
mode:
authorGord Thompson <gord@gordthompson.com>2021-09-30 17:39:05 -0600
committerMike Bayer <mike_mp@zzzcomputing.com>2021-10-28 20:31:09 -0400
commit6a786297014c7b2a381084299ac3b4aabcf3c318 (patch)
tree89982a5995d4f9c235e04b27ed2dc6577fb889a8 /test/orm/test_query.py
parent134d4953a9f3c3871aff1352c1d2c3926c9426c5 (diff)
downloadsqlalchemy-6a786297014c7b2a381084299ac3b4aabcf3c318.tar.gz
Modernize tests - session_query_get
Co-authored-by: Mike Bayer <mike_mp@zzzcomputing.com> Change-Id: I92013aad471baf32df1b51b756e86d95449b5cfd
Diffstat (limited to 'test/orm/test_query.py')
-rw-r--r--test/orm/test_query.py389
1 files changed, 177 insertions, 212 deletions
diff --git a/test/orm/test_query.py b/test/orm/test_query.py
index 1ff661284..c567cf1d1 100644
--- a/test/orm/test_query.py
+++ b/test/orm/test_query.py
@@ -1161,14 +1161,6 @@ class GetTest(QueryTest):
s = fixture_session()
- u1 = s.query(User).options(joinedload(User.addresses)).get(8)
- eq_(len(u1.__dict__["addresses"]), 3)
-
- def test_loader_options_future(self):
- User = self.classes.User
-
- s = fixture_session()
-
u1 = s.get(User, 8, options=[joinedload(User.addresses)])
eq_(len(u1.__dict__["addresses"]), 3)
@@ -1176,13 +1168,13 @@ class GetTest(QueryTest):
CompositePk = self.classes.CompositePk
s = fixture_session()
- is_(s.query(CompositePk).get({"i": 100, "j": 100}), None)
+ is_(s.get(CompositePk, {"i": 100, "j": 100}), None)
def test_get_composite_pk_keyword_based_result(self):
CompositePk = self.classes.CompositePk
s = fixture_session()
- one_two = s.query(CompositePk).get({"i": 1, "j": 2})
+ one_two = s.get(CompositePk, {"i": 1, "j": 2})
eq_(one_two.i, 1)
eq_(one_two.j, 2)
eq_(one_two.k, 3)
@@ -1191,41 +1183,31 @@ class GetTest(QueryTest):
CompositePk = self.classes.CompositePk
s = fixture_session()
- q = s.query(CompositePk)
- assert_raises(sa_exc.InvalidRequestError, q.get, {"i": 1, "k": 2})
+ assert_raises(
+ sa_exc.InvalidRequestError, s.get, CompositePk, {"i": 1, "k": 2}
+ )
def test_get_composite_pk_keyword_based_too_few_keys(self):
CompositePk = self.classes.CompositePk
s = fixture_session()
- q = s.query(CompositePk)
- assert_raises(sa_exc.InvalidRequestError, q.get, {"i": 1})
+ assert_raises(sa_exc.InvalidRequestError, s.get, CompositePk, {"i": 1})
def test_get_composite_pk_keyword_based_too_many_keys(self):
CompositePk = self.classes.CompositePk
s = fixture_session()
- q = s.query(CompositePk)
assert_raises(
- sa_exc.InvalidRequestError, q.get, {"i": 1, "j": "2", "k": 3}
+ sa_exc.InvalidRequestError,
+ s.get,
+ CompositePk,
+ {"i": 1, "j": "2", "k": 3},
)
def test_get(self):
User = self.classes.User
s = fixture_session()
- assert s.query(User).get(19) is None
- u = s.query(User).get(7)
- u2 = s.query(User).get(7)
- assert u is u2
- s.expunge_all()
- u2 = s.query(User).get(7)
- assert u is not u2
-
- def test_get_future(self):
- User = self.classes.User
-
- s = fixture_session()
assert s.get(User, 19) is None
u = s.get(User, 7)
u2 = s.get(User, 7)
@@ -1238,13 +1220,13 @@ class GetTest(QueryTest):
CompositePk = self.classes.CompositePk
s = fixture_session()
- assert s.query(CompositePk).get((100, 100)) is None
+ assert s.get(CompositePk, (100, 100)) is None
def test_get_composite_pk_result(self):
CompositePk = self.classes.CompositePk
s = fixture_session()
- one_two = s.query(CompositePk).get((1, 2))
+ one_two = s.get(CompositePk, (1, 2))
assert one_two.i == 1
assert one_two.j == 2
assert one_two.k == 3
@@ -1253,29 +1235,52 @@ class GetTest(QueryTest):
CompositePk = self.classes.CompositePk
s = fixture_session()
- q = s.query(CompositePk)
- assert_raises(sa_exc.InvalidRequestError, q.get, 7)
+ assert_raises_message(
+ sa_exc.InvalidRequestError,
+ r"Incorrect number of values in identifier to formulate "
+ r"primary key for session.get\(\); ",
+ s.get,
+ CompositePk,
+ 7,
+ )
def test_get_too_few_params_tuple(self):
CompositePk = self.classes.CompositePk
s = fixture_session()
- q = s.query(CompositePk)
- assert_raises(sa_exc.InvalidRequestError, q.get, (7,))
+ assert_raises_message(
+ sa_exc.InvalidRequestError,
+ r"Incorrect number of values in identifier to formulate "
+ r"primary key for session.get\(\); ",
+ s.get,
+ CompositePk,
+ (7,),
+ )
def test_get_too_many_params(self):
CompositePk = self.classes.CompositePk
s = fixture_session()
- q = s.query(CompositePk)
- assert_raises(sa_exc.InvalidRequestError, q.get, (7, 10, 100))
+ assert_raises_message(
+ sa_exc.InvalidRequestError,
+ r"Incorrect number of values in identifier to formulate "
+ r"primary key for session.get\(\); ",
+ s.get,
+ CompositePk,
+ (7, 10, 100),
+ )
def test_get_against_col(self):
User = self.classes.User
s = fixture_session()
- q = s.query(User.id)
- assert_raises(sa_exc.InvalidRequestError, q.get, (5,))
+ assert_raises_message(
+ sa_exc.ArgumentError,
+ r"Expected mapped class or mapper, got: .*Instrumented",
+ s.get,
+ User.id,
+ (5,),
+ )
@testing.fixture
def outerjoin_mapping(self, registry):
@@ -1302,19 +1307,19 @@ class GetTest(QueryTest):
UserThing = outerjoin_mapping
sess = fixture_session()
- u10 = sess.query(UserThing).get((10, None))
+ u10 = sess.get(UserThing, (10, None))
eq_(u10, UserThing(id=10))
def test_get_fully_null_pk(self):
User = self.classes.User
s = fixture_session()
- q = s.query(User)
assert_raises_message(
sa_exc.SAWarning,
r"fully NULL primary key identity cannot load any object. "
"This condition may raise an error in a future release.",
- q.get,
+ s.get,
+ User,
None,
)
@@ -1322,48 +1327,16 @@ class GetTest(QueryTest):
UserThing = outerjoin_mapping
s = fixture_session()
- q = s.query(UserThing)
assert_raises_message(
sa_exc.SAWarning,
r"fully NULL primary key identity cannot load any object. "
"This condition may raise an error in a future release.",
- q.get,
+ s.get,
+ UserThing,
(None, None),
)
- def test_no_criterion(self):
- """test that get()/load() does not use preexisting filter/etc.
- criterion"""
-
- User, Address = self.classes.User, self.classes.Address
-
- s = fixture_session()
-
- q = s.query(User).join(User.addresses).filter(Address.user_id == 8)
- assert_raises(sa_exc.InvalidRequestError, q.get, 7)
- assert_raises(
- sa_exc.InvalidRequestError,
- s.query(User).filter(User.id == 7).get,
- 19,
- )
-
- # order_by()/get() doesn't raise
- s.query(User).order_by(User.id).get(8)
-
- def test_no_criterion_when_already_loaded(self):
- """test that get()/load() does not use preexisting filter/etc.
- criterion, even when we're only using the identity map."""
-
- User, Address = self.classes.User, self.classes.Address
-
- s = fixture_session()
-
- s.query(User).get(7)
-
- q = s.query(User).join(User.addresses).filter(Address.user_id == 8)
- assert_raises(sa_exc.InvalidRequestError, q.get, 7)
-
def test_unique_param_names(self):
users = self.tables.users
@@ -1375,20 +1348,20 @@ class GetTest(QueryTest):
assert s.primary_key == m.primary_key
sess = fixture_session()
- assert sess.query(SomeUser).get(7).name == "jack"
+ assert sess.get(SomeUser, 7).name == "jack"
def test_load(self):
User, Address = self.classes.User, self.classes.Address
s = fixture_session(autoflush=False)
- assert s.query(User).populate_existing().get(19) is None
+ assert s.get(User, 19, populate_existing=True) is None
- u = s.query(User).populate_existing().get(7)
- u2 = s.query(User).populate_existing().get(7)
+ u = s.get(User, 7, populate_existing=True)
+ u2 = s.get(User, 7, populate_existing=True)
assert u is u2
s.expunge_all()
- u2 = s.query(User).populate_existing().get(7)
+ u2 = s.get(User, 7, populate_existing=True)
assert u is not u2
u2.name = "some name"
@@ -1397,7 +1370,7 @@ class GetTest(QueryTest):
assert u2 in s.dirty
assert a in u2.addresses
- s.query(User).populate_existing().get(7)
+ s.get(User, 7, populate_existing=True)
assert u2 not in s.dirty
assert u2.name == "jack"
@@ -1426,114 +1399,6 @@ class GetTest(QueryTest):
LocalFoo(id=ustring, data=ustring),
)
- def test_populate_existing(self):
- User, Address = self.classes.User, self.classes.Address
- Order = self.classes.Order
-
- s = fixture_session(autoflush=False)
-
- userlist = s.query(User).all()
-
- u = userlist[0]
- u.name = "foo"
- a = Address(name="ed")
- u.addresses.append(a)
-
- self.assert_(a in u.addresses)
-
- s.query(User).populate_existing().all()
-
- self.assert_(u not in s.dirty)
-
- self.assert_(u.name == "jack")
-
- self.assert_(a not in u.addresses)
-
- u.addresses[0].email_address = "lala"
- u.orders[1].items[2].description = "item 12"
- # test that lazy load doesn't change child items
- s.query(User).populate_existing().all()
- assert u.addresses[0].email_address == "lala"
- assert u.orders[1].items[2].description == "item 12"
-
- # eager load does
- s.query(User).options(
- joinedload(User.addresses),
- joinedload(User.orders).joinedload(Order.items),
- ).populate_existing().all()
- assert u.addresses[0].email_address == "jack@bean.com"
- assert u.orders[1].items[2].description == "item 5"
-
- def test_populate_existing_future(self):
- User, Address = self.classes.User, self.classes.Address
- Order = self.classes.Order
-
- s = fixture_session(autoflush=False)
-
- userlist = s.query(User).all()
-
- u = userlist[0]
- u.name = "foo"
- a = Address(name="ed")
- u.addresses.append(a)
-
- self.assert_(a in u.addresses)
-
- stmt = select(User).execution_options(populate_existing=True)
-
- s.execute(
- stmt,
- ).scalars().all()
-
- self.assert_(u not in s.dirty)
-
- self.assert_(u.name == "jack")
-
- self.assert_(a not in u.addresses)
-
- u.addresses[0].email_address = "lala"
- u.orders[1].items[2].description = "item 12"
- # test that lazy load doesn't change child items
- s.query(User).populate_existing().all()
- assert u.addresses[0].email_address == "lala"
- assert u.orders[1].items[2].description == "item 12"
-
- # eager load does
-
- stmt = (
- select(User)
- .options(
- joinedload(User.addresses),
- joinedload(User.orders).joinedload(Order.items),
- )
- .execution_options(populate_existing=True)
- )
-
- s.execute(stmt).unique().scalars().all()
-
- assert u.addresses[0].email_address == "jack@bean.com"
- assert u.orders[1].items[2].description == "item 5"
-
- def test_option_transfer_future(self):
- User = self.classes.User
- stmt = select(User).execution_options(
- populate_existing=True, autoflush=False, yield_per=10
- )
- s = fixture_session()
-
- m1 = mock.Mock()
-
- event.listen(s, "do_orm_execute", m1)
-
- s.execute(stmt)
-
- eq_(
- m1.mock_calls[0][1][0].load_options,
- QueryContext.default_load_options(
- _autoflush=False, _populate_existing=True, _yield_per=10
- ),
- )
-
class InvalidGenerationsTest(QueryTest, AssertsCompiledSQL):
@testing.combinations(
@@ -1655,14 +1520,6 @@ class InvalidGenerationsTest(QueryTest, AssertsCompiledSQL):
)
assert_raises(sa_exc.InvalidRequestError, q.with_polymorphic, User)
- def test_only_full_mapper_zero(self):
- User, Address = self.classes.User, self.classes.Address
-
- s = fixture_session()
-
- q = s.query(User, Address)
- assert_raises(sa_exc.InvalidRequestError, q.get, 5)
-
def test_entity_or_mapper_zero_from_context(self):
User, Address = self.classes.User, self.classes.Address
s = fixture_session()
@@ -3283,7 +3140,7 @@ class FilterTest(QueryTest, AssertsCompiledSQL):
User, Address = self.classes.User, self.classes.Address
sess = fixture_session()
- address = sess.query(Address).get(3)
+ address = sess.get(Address, 3)
assert [User(id=8)] == sess.query(User).filter(
User.addresses.contains(address)
).all()
@@ -3436,7 +3293,7 @@ class FilterTest(QueryTest, AssertsCompiledSQL):
Address.id
).all()
- dingaling = sess.query(Dingaling).get(2)
+ dingaling = sess.get(Dingaling, 2)
assert [User(id=9)] == sess.query(User).filter(
User.addresses.any(Address.dingaling == dingaling)
).all()
@@ -3445,7 +3302,7 @@ class FilterTest(QueryTest, AssertsCompiledSQL):
Item, Order = self.classes.Item, self.classes.Order
sess = fixture_session()
- item = sess.query(Item).get(3)
+ item = sess.get(Item, 3)
eq_(
sess.query(Order)
@@ -3462,7 +3319,7 @@ class FilterTest(QueryTest, AssertsCompiledSQL):
[Order(id=4), Order(id=5)],
)
- item2 = sess.query(Item).get(5)
+ item2 = sess.get(Item, 5)
eq_(
sess.query(Order)
.filter(Order.items.contains(item))
@@ -3522,7 +3379,7 @@ class FilterTest(QueryTest, AssertsCompiledSQL):
)
sess = fixture_session()
- user = sess.query(User).get(8)
+ user = sess.get(User, 8)
assert [Address(id=2), Address(id=3), Address(id=4)] == sess.query(
Address
).filter(Address.user == user).all()
@@ -3542,7 +3399,7 @@ class FilterTest(QueryTest, AssertsCompiledSQL):
).all() # noqa
# o2o
- dingaling = sess.query(Dingaling).get(2)
+ dingaling = sess.get(Dingaling, 2)
assert [Address(id=5)] == sess.query(Address).filter(
Address.dingaling == dingaling
).all()
@@ -3567,7 +3424,7 @@ class FilterTest(QueryTest, AssertsCompiledSQL):
User, Address = self.classes.User, self.classes.Address
sess = fixture_session()
- user = sess.query(User).get(8)
+ user = sess.get(User, 8)
assert [Address(id=2), Address(id=3), Address(id=4)] == sess.query(
Address
).filter_by(user=user).all()
@@ -6440,7 +6297,7 @@ class ParentTest(QueryTest, AssertsCompiledSQL):
User, Address = self.classes.User, self.classes.Address
sess = fixture_session()
- u1 = sess.query(User).get(7)
+ u1 = sess.get(User, 7)
q = (
sess.query(Address)
.select_from(Address)
@@ -6459,7 +6316,7 @@ class ParentTest(QueryTest, AssertsCompiledSQL):
User, Address = self.classes.User, self.classes.Address
sess = fixture_session()
- u1 = sess.query(User).get(7)
+ u1 = sess.get(User, 7)
q = sess.query(User, Address).filter(
with_parent(u1, User.addresses, from_entity=Address)
)
@@ -6478,7 +6335,7 @@ class ParentTest(QueryTest, AssertsCompiledSQL):
User, Address = self.classes.User, self.classes.Address
sess = fixture_session()
- u1 = sess.query(User).get(7)
+ u1 = sess.get(User, 7)
a1 = aliased(Address)
q = sess.query(a1).filter(with_parent(u1, User.addresses.of_type(a1)))
self.assert_compile(
@@ -6495,7 +6352,7 @@ class ParentTest(QueryTest, AssertsCompiledSQL):
User, Address = self.classes.User, self.classes.Address
sess = fixture_session()
- u1 = sess.query(User).get(7)
+ u1 = sess.get(User, 7)
a1 = aliased(Address)
a2 = aliased(Address)
q = sess.query(a1, a2).filter(
@@ -6518,7 +6375,7 @@ class ParentTest(QueryTest, AssertsCompiledSQL):
User, Address = self.classes.User, self.classes.Address
sess = fixture_session()
- u1 = sess.query(User).get(7)
+ u1 = sess.get(User, 7)
a1 = aliased(Address)
a2 = aliased(Address)
q = sess.query(a1, a2).filter(
@@ -7335,6 +7192,114 @@ class ImmediateTest(_fixtures.FixtureTest):
class ExecutionOptionsTest(QueryTest):
+ def test_populate_existing(self):
+ User, Address = self.classes.User, self.classes.Address
+ Order = self.classes.Order
+
+ s = fixture_session(autoflush=False)
+
+ userlist = s.query(User).all()
+
+ u = userlist[0]
+ u.name = "foo"
+ a = Address(name="ed")
+ u.addresses.append(a)
+
+ self.assert_(a in u.addresses)
+
+ s.query(User).populate_existing().all()
+
+ self.assert_(u not in s.dirty)
+
+ self.assert_(u.name == "jack")
+
+ self.assert_(a not in u.addresses)
+
+ u.addresses[0].email_address = "lala"
+ u.orders[1].items[2].description = "item 12"
+ # test that lazy load doesn't change child items
+ s.query(User).populate_existing().all()
+ assert u.addresses[0].email_address == "lala"
+ assert u.orders[1].items[2].description == "item 12"
+
+ # eager load does
+ s.query(User).options(
+ joinedload(User.addresses),
+ joinedload(User.orders).joinedload(Order.items),
+ ).populate_existing().all()
+ assert u.addresses[0].email_address == "jack@bean.com"
+ assert u.orders[1].items[2].description == "item 5"
+
+ def test_populate_existing_future(self):
+ User, Address = self.classes.User, self.classes.Address
+ Order = self.classes.Order
+
+ s = fixture_session(autoflush=False)
+
+ userlist = s.query(User).all()
+
+ u = userlist[0]
+ u.name = "foo"
+ a = Address(name="ed")
+ u.addresses.append(a)
+
+ self.assert_(a in u.addresses)
+
+ stmt = select(User).execution_options(populate_existing=True)
+
+ s.execute(
+ stmt,
+ ).scalars().all()
+
+ self.assert_(u not in s.dirty)
+
+ self.assert_(u.name == "jack")
+
+ self.assert_(a not in u.addresses)
+
+ u.addresses[0].email_address = "lala"
+ u.orders[1].items[2].description = "item 12"
+ # test that lazy load doesn't change child items
+ s.query(User).populate_existing().all()
+ assert u.addresses[0].email_address == "lala"
+ assert u.orders[1].items[2].description == "item 12"
+
+ # eager load does
+
+ stmt = (
+ select(User)
+ .options(
+ joinedload(User.addresses),
+ joinedload(User.orders).joinedload(Order.items),
+ )
+ .execution_options(populate_existing=True)
+ )
+
+ s.execute(stmt).unique().scalars().all()
+
+ assert u.addresses[0].email_address == "jack@bean.com"
+ assert u.orders[1].items[2].description == "item 5"
+
+ def test_option_transfer_future(self):
+ User = self.classes.User
+ stmt = select(User).execution_options(
+ populate_existing=True, autoflush=False, yield_per=10
+ )
+ s = fixture_session()
+
+ m1 = mock.Mock()
+
+ event.listen(s, "do_orm_execute", m1)
+
+ s.execute(stmt)
+
+ eq_(
+ m1.mock_calls[0][1][0].load_options,
+ QueryContext.default_load_options(
+ _autoflush=False, _populate_existing=True, _yield_per=10
+ ),
+ )
+
def test_option_building(self):
User = self.classes.User
@@ -7682,9 +7647,9 @@ class QueryClsTest(QueryTest):
s = fixture_session(query_cls=fixture())
- assert s.query(User).get(19) is None
- u = s.query(User).get(7)
- u2 = s.query(User).get(7)
+ assert s.get(User, 19) is None
+ u = s.get(User, 7)
+ u2 = s.get(User, 7)
assert u is u2
def _test_o2m_lazyload(self, fixture):