diff options
| author | Jason Kirtland <jek@discorporate.us> | 2008-05-14 20:44:16 +0000 |
|---|---|---|
| committer | Jason Kirtland <jek@discorporate.us> | 2008-05-14 20:44:16 +0000 |
| commit | 81b1df8fe1b8cc66f61a430ca50bfcb7362ab9c1 (patch) | |
| tree | 0678726b81c314a44c24968be7cf93b9b206d6a4 /lib | |
| parent | 78dc35822ea9a2460540f0eb0d39c24c048dc57f (diff) | |
| download | sqlalchemy-81b1df8fe1b8cc66f61a430ca50bfcb7362ab9c1.tar.gz | |
Query.one() raises either NoResultFound or MultipleResultsFound, [ticket:1034]
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/sqlalchemy/orm/exc.py | 5 | ||||
| -rw-r--r-- | lib/sqlalchemy/orm/query.py | 17 |
2 files changed, 17 insertions, 5 deletions
diff --git a/lib/sqlalchemy/orm/exc.py b/lib/sqlalchemy/orm/exc.py index 2d1d2b108..ea7efd3fb 100644 --- a/lib/sqlalchemy/orm/exc.py +++ b/lib/sqlalchemy/orm/exc.py @@ -24,6 +24,11 @@ class ObjectDeletedError(sa_exc.InvalidRequestError): class UnmappedColumnError(sa_exc.InvalidRequestError): """Mapping operation was requested on an unknown column.""" +class NoResultFound(sa_exc.InvalidRequestError): + """A database result was required but none was found.""" + +class MultipleResultsFound(sa_exc.InvalidRequestError): + """A single database result was required but more than one were found.""" # Legacy compat until 0.6. sa_exc.ConcurrentModificationError = ConcurrentModificationError diff --git a/lib/sqlalchemy/orm/query.py b/lib/sqlalchemy/orm/query.py index 608f3f734..47d00964d 100644 --- a/lib/sqlalchemy/orm/query.py +++ b/lib/sqlalchemy/orm/query.py @@ -1045,22 +1045,29 @@ class Query(object): return None def one(self): - """Return the first result, raising an exception unless exactly one row exists. + """Return exactly one result or raise an exception. + + Raises ``sqlalchemy.orm.NoResultError`` if the query selects no rows. + Raisees ``sqlalchemy.orm.MultipleResultsError`` if multiple rows are + selected. This results in an execution of the underlying query. """ if self._statement: - raise exceptions.InvalidRequestError("one() not available when from_statement() is used; use `first()` instead.") - + raise exceptions.InvalidRequestError( + "one() not available when from_statement() is used; " + "use `first()` instead.") + ret = list(self[0:2]) if len(ret) == 1: return ret[0] elif len(ret) == 0: - raise sa_exc.InvalidRequestError('No rows returned for one()') + raise orm_exc.NoResultFound("No row was found for one()") else: - raise sa_exc.InvalidRequestError('Multiple rows returned for one()') + raise orm_exc.MultipleResultsFound( + "Multiple rows were found for one()") def __iter__(self): context = self._compile_context() |
