diff options
author | Eric Siegerman <eric.siegerman@rci.rogers.com> | 2015-09-24 13:16:58 -0400 |
---|---|---|
committer | Eric Siegerman <eric.siegerman@rci.rogers.com> | 2015-09-24 13:22:45 -0400 |
commit | a9b5fb3f497837c0a4f1122c49c5dd54c87474a0 (patch) | |
tree | 5d898b3d13afce1c73bd8bc6b2ebb1199e9f4d84 /lib/sqlalchemy/orm/query.py | |
parent | 0854f82993c9bc07a64cc52bb4c092d1f5f11b8c (diff) | |
download | sqlalchemy-pr/201.tar.gz |
Add Query.one_or_none()pr/201
Diffstat (limited to 'lib/sqlalchemy/orm/query.py')
-rw-r--r-- | lib/sqlalchemy/orm/query.py | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/lib/sqlalchemy/orm/query.py b/lib/sqlalchemy/orm/query.py index 7e77c66a8..8c4925905 100644 --- a/lib/sqlalchemy/orm/query.py +++ b/lib/sqlalchemy/orm/query.py @@ -2473,6 +2473,38 @@ class Query(object): else: return None + def one_or_none(self): + """Return at most one result or raise an exception. + + Returns ``None`` if the query selects + no rows. Raises ``sqlalchemy.orm.exc.MultipleResultsFound`` + if multiple object identities are returned, or if multiple + rows are returned for a query that does not return object + identities. + + Note that an entity query, that is, one which selects one or + more mapped classes as opposed to individual column attributes, + may ultimately represent many rows but only one row of + unique entity or entities - this is a successful result for + `one_or_none()`. + + Calling ``one_or_none()`` results in an execution of the underlying + query. + + .. versionchanged:: 1.0.9 + Added ``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 one(self): """Return exactly one result or raise an exception. |