diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2020-05-25 23:26:18 -0400 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2020-05-25 23:26:18 -0400 |
| commit | 366e88ea0e5c5417184c1dd4776cff752560631d (patch) | |
| tree | 80fd3f88500c2b53c6cfc846e193b8fc43e733f4 /lib/sqlalchemy/ext | |
| parent | 6b3513f56c2a5d3ba45215b2438c47dba4336740 (diff) | |
| download | sqlalchemy-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.py | 37 |
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. |
