From eb569b672bada027f5cfe7c918c91affeb9c61b0 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Fri, 22 Apr 2011 18:33:55 -0400 Subject: [PATCH] - It is an error to call query.get() when the given entity is not a single, full class entity or mapper (i.e. a column). This is a deprecation warning in 0.6.8. [ticket:2144] --- CHANGES | 6 ++++++ lib/sqlalchemy/orm/query.py | 16 +++++++++++++--- lib/sqlalchemy/sql/compiler.py | 2 +- test/orm/test_query.py | 7 +++++++ 4 files changed, 27 insertions(+), 4 deletions(-) diff --git a/CHANGES b/CHANGES index faa02e86ee..54744b5a9a 100644 --- a/CHANGES +++ b/CHANGES @@ -15,6 +15,12 @@ CHANGES fixed up some of the error messages tailored in [ticket:2069] + - It is an error to call query.get() when the + given entity is not a single, full class + entity or mapper (i.e. a column). This is + a deprecation warning in 0.6.8. + [ticket:2144] + - sql - Added explicit check for when Column .name is assigned as blank string [ticket:2140] diff --git a/lib/sqlalchemy/orm/query.py b/lib/sqlalchemy/orm/query.py index 07df0de429..b7b2eccec8 100644 --- a/lib/sqlalchemy/orm/query.py +++ b/lib/sqlalchemy/orm/query.py @@ -298,6 +298,18 @@ class Query(object): ) return self._mapper_zero() + def _only_full_mapper_zero(self, methname): + if len(self._entities) != 1: + raise sa_exc.InvalidRequestError( + "%s() can only be used against " + "a single mapped class." % methname) + entity = self._entity_zero() + if not hasattr(entity, 'primary_entity'): + raise sa_exc.InvalidRequestError( + "%s() can only be used against " + "a single mapped class." % methname) + return entity.entity_zero + def _only_entity_zero(self, rationale=None): if len(self._entities) > 1: raise sa_exc.InvalidRequestError( @@ -631,9 +643,7 @@ class Query(object): ident = util.to_list(ident) - mapper = self._only_mapper_zero( - "get() can only be used against a single mapped class." - ) + mapper = self._only_full_mapper_zero("get") if len(ident) != len(mapper.primary_key): raise sa_exc.InvalidRequestError( diff --git a/lib/sqlalchemy/sql/compiler.py b/lib/sqlalchemy/sql/compiler.py index 82c1748ccd..829adebac0 100644 --- a/lib/sqlalchemy/sql/compiler.py +++ b/lib/sqlalchemy/sql/compiler.py @@ -965,7 +965,7 @@ class SQLCompiler(engine.Compiled): if colparams or not supports_default_values: text += " (%s)" % ', '.join([preparer.format_column(c[0]) for c in colparams]) - + if self.returning or insert_stmt._returning: self.returning = self.returning or insert_stmt._returning returning_clause = self.returning_clause( diff --git a/test/orm/test_query.py b/test/orm/test_query.py index 93f349ff29..a87e1398a5 100644 --- a/test/orm/test_query.py +++ b/test/orm/test_query.py @@ -189,6 +189,13 @@ class GetTest(QueryTest): q = s.query(CompositePk) assert_raises(sa_exc.InvalidRequestError, q.get, (7, 10, 100)) + def test_get_against_col(self): + User = self.classes.User + + s = Session() + q = s.query(User.id) + assert_raises(sa_exc.InvalidRequestError, q.get, (5, )) + def test_get_null_pk(self): """test that a mapping which can have None in a PK (i.e. map to an outerjoin) works with get().""" -- 2.39.5