summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorJason Kirtland <jek@discorporate.us>2008-05-14 20:44:16 +0000
committerJason Kirtland <jek@discorporate.us>2008-05-14 20:44:16 +0000
commit81b1df8fe1b8cc66f61a430ca50bfcb7362ab9c1 (patch)
tree0678726b81c314a44c24968be7cf93b9b206d6a4 /lib
parent78dc35822ea9a2460540f0eb0d39c24c048dc57f (diff)
downloadsqlalchemy-81b1df8fe1b8cc66f61a430ca50bfcb7362ab9c1.tar.gz
Query.one() raises either NoResultFound or MultipleResultsFound, [ticket:1034]
Diffstat (limited to 'lib')
-rw-r--r--lib/sqlalchemy/orm/exc.py5
-rw-r--r--lib/sqlalchemy/orm/query.py17
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()