summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/ext
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2020-05-25 23:26:18 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2020-05-25 23:26:18 -0400
commit366e88ea0e5c5417184c1dd4776cff752560631d (patch)
tree80fd3f88500c2b53c6cfc846e193b8fc43e733f4 /lib/sqlalchemy/ext
parent6b3513f56c2a5d3ba45215b2438c47dba4336740 (diff)
downloadsqlalchemy-366e88ea0e5c5417184c1dd4776cff752560631d.tar.gz
Revert 903b18828461bb8cb8dca4acc56809b3df2b14d5
This was accidentally pushed just now. Change-Id: I4da4151c4a81e5cf72146f8dcab3537301ccaae9
Diffstat (limited to 'lib/sqlalchemy/ext')
-rw-r--r--lib/sqlalchemy/ext/baked.py37
1 files changed, 30 insertions, 7 deletions
diff --git a/lib/sqlalchemy/ext/baked.py b/lib/sqlalchemy/ext/baked.py
index fdcaec559..112e245f7 100644
--- a/lib/sqlalchemy/ext/baked.py
+++ b/lib/sqlalchemy/ext/baked.py
@@ -383,7 +383,7 @@ class Result(object):
return str(self._as_query())
def __iter__(self):
- return self._iter().__iter__()
+ return iter(self._iter())
def _iter(self):
bq = self.bq
@@ -463,15 +463,16 @@ class Result(object):
Equivalent to :meth:`_query.Query.first`.
"""
-
bq = self.bq.with_criteria(lambda q: q.slice(0, 1))
- return (
+ ret = list(
bq.for_session(self.session)
.params(self._params)
._using_post_criteria(self._post_criteria)
- ._iter()
- .first()
)
+ if len(ret) > 0:
+ return ret[0]
+ else:
+ return None
def one(self):
"""Return exactly one result or raise an exception.
@@ -479,7 +480,19 @@ class Result(object):
Equivalent to :meth:`_query.Query.one`.
"""
- return self._iter().one()
+ try:
+ ret = self.one_or_none()
+ except orm_exc.MultipleResultsFound as err:
+ util.raise_(
+ orm_exc.MultipleResultsFound(
+ "Multiple rows were found for one()"
+ ),
+ replace_context=err,
+ )
+ else:
+ if ret is None:
+ raise orm_exc.NoResultFound("No row was found for one()")
+ return ret
def one_or_none(self):
"""Return one or zero results, or raise an exception for multiple
@@ -490,7 +503,17 @@ class Result(object):
.. versionadded:: 1.0.9
"""
- return self._iter().one_or_none()
+ ret = list(self)
+
+ l = len(ret)
+ if l == 1:
+ return ret[0]
+ elif l == 0:
+ return None
+ else:
+ raise orm_exc.MultipleResultsFound(
+ "Multiple rows were found for one_or_none()"
+ )
def all(self):
"""Return all rows.