diff options
| author | mike bayer <mike_mp@zzzcomputing.com> | 2017-01-30 17:27:21 -0500 |
|---|---|---|
| committer | Gerrit Code Review <gerrit@awstats.zzzcomputing.com> | 2017-01-30 17:27:21 -0500 |
| commit | 5ef2fde8fb25e30452e06764bf0ec022eb23c15d (patch) | |
| tree | 5ec2f3bf339813aafde7353de71eb8e7e0d2ea40 /lib/sqlalchemy/ext | |
| parent | f411cac35001e0d40a6217846d3df40f676a2d4d (diff) | |
| parent | ecfda6512cf8a50238529168932586444b657954 (diff) | |
| download | sqlalchemy-5ef2fde8fb25e30452e06764bf0ec022eb23c15d.tar.gz | |
Merge "Add count(), scalar() to baked query"
Diffstat (limited to 'lib/sqlalchemy/ext')
| -rw-r--r-- | lib/sqlalchemy/ext/baked.py | 36 |
1 files changed, 35 insertions, 1 deletions
diff --git a/lib/sqlalchemy/ext/baked.py b/lib/sqlalchemy/ext/baked.py index c329eb47b..090466618 100644 --- a/lib/sqlalchemy/ext/baked.py +++ b/lib/sqlalchemy/ext/baked.py @@ -17,7 +17,7 @@ from ..orm.query import Query from ..orm import strategies, attributes, properties, \ strategy_options, util as orm_util, interfaces from .. import log as sqla_log -from ..sql import util as sql_util +from ..sql import util as sql_util, func, literal_column from ..orm import exc as orm_exc from .. import exc as sa_exc from .. import util @@ -254,6 +254,40 @@ class Result(object): return context.query.params(self._params).\ with_session(self.session)._execute_and_instances(context) + def count(self): + """return the 'count'. + + Equivalent to :meth:`.Query.count`. + + Note this uses a subquery to ensure an accurate count regardless + of the structure of the original statement. + + .. versionadded:: 1.1.6 + + """ + + col = func.count(literal_column('*')) + bq = self.bq.with_criteria(lambda q: q.from_self(col)) + return bq.for_session(self.session).scalar() + + def scalar(self): + """Return the first element of the first result or None + if no rows present. If multiple rows are returned, + raises MultipleResultsFound. + + Equivalent to :meth:`.Query.scalar`. + + .. versionadded:: 1.1.6 + + """ + try: + ret = self.one() + if not isinstance(ret, tuple): + return ret + return ret[0] + except orm_exc.NoResultFound: + return None + def first(self): """Return the first row. |
