summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2008-09-11 19:35:40 +0000
committerMike Bayer <mike_mp@zzzcomputing.com>2008-09-11 19:35:40 +0000
commit37d59c1b7fe616201722c71968ba11db2d19bbcb (patch)
tree43e0283097103e358a07b7cf9dbb6ed0403b88a1
parent42d7298a50250d36547891d0bdb2f4022087c38c (diff)
downloadsqlalchemy-37d59c1b7fe616201722c71968ba11db2d19bbcb.tar.gz
- Added scalar() and value() methods to Query, each return a
single scalar value. scalar() takes no arguments and is roughly equivalent to first()[0], value() takes a single column expression and is roughly equivalent to values(expr).next()[0].
-rw-r--r--CHANGES6
-rw-r--r--lib/sqlalchemy/orm/query.py5
-rw-r--r--test/orm/query.py1
3 files changed, 12 insertions, 0 deletions
diff --git a/CHANGES b/CHANGES
index 1d98d811c..ac04eec75 100644
--- a/CHANGES
+++ b/CHANGES
@@ -19,6 +19,12 @@ CHANGES
objects such as Query(table.c.col) will return the "key"
attribute of the Column.
+ - Added scalar() and value() methods to Query, each return a
+ single scalar value. scalar() takes no arguments and is
+ roughly equivalent to first()[0], value()
+ takes a single column expression and is roughly equivalent to
+ values(expr).next()[0].
+
- Improved the determination of the FROM clause when placing SQL
expressions in the query() list of entities. In particular
scalar subqueries should not "leak" their inner FROM objects
diff --git a/lib/sqlalchemy/orm/query.py b/lib/sqlalchemy/orm/query.py
index c9f29e6be..c2d47afea 100644
--- a/lib/sqlalchemy/orm/query.py
+++ b/lib/sqlalchemy/orm/query.py
@@ -550,6 +550,11 @@ class Query(object):
return iter(q)
_values = values
+ def value(self, column):
+ """Return a scalar result corresponding to the given column expression."""
+
+ return self.values(column).next()[0]
+
@_generative()
def add_column(self, column):
"""Add a SQL ColumnElement to the list of result columns to be returned."""
diff --git a/test/orm/query.py b/test/orm/query.py
index fb16ae780..ffc7104c8 100644
--- a/test/orm/query.py
+++ b/test/orm/query.py
@@ -568,6 +568,7 @@ class AggregateTest(QueryTest):
sess = create_session()
orders = sess.query(Order).filter(Order.id.in_([2, 3, 4]))
self.assertEquals(orders.values(func.sum(Order.user_id * Order.address_id)).next(), (79,))
+ self.assertEquals(orders.value(func.sum(Order.user_id * Order.address_id)), 79)
def test_apply(self):
sess = create_session()