summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/ext
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2017-01-25 13:30:47 -0500
committerMike Bayer <mike_mp@zzzcomputing.com>2017-01-30 13:02:29 -0500
commitecfda6512cf8a50238529168932586444b657954 (patch)
tree7f1c9f0f5450afadabcb39fdbeb39f66865cb633 /lib/sqlalchemy/ext
parent1c578a710f14568856dad6a1c0bad1269b4108c4 (diff)
downloadsqlalchemy-ecfda6512cf8a50238529168932586444b657954.tar.gz
Add count(), scalar() to baked query
Change-Id: I8af0d7b41ae2df384ce5d0ef274732352d81f376 Fixes: #3897
Diffstat (limited to 'lib/sqlalchemy/ext')
-rw-r--r--lib/sqlalchemy/ext/baked.py36
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.