]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- Added scalar() and value() methods to Query, each return a
authorMike Bayer <mike_mp@zzzcomputing.com>
Thu, 11 Sep 2008 19:35:40 +0000 (19:35 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Thu, 11 Sep 2008 19:35:40 +0000 (19:35 +0000)
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].

CHANGES
lib/sqlalchemy/orm/query.py
test/orm/query.py

diff --git a/CHANGES b/CHANGES
index 1d98d811cb1f8e14eddb0e8fe819d8c3ccd31ecc..ac04eec75d62c57911a86d024abed7bbb5af0515 100644 (file)
--- 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
index c9f29e6be6e01fe3917d8db8f49bc4d7f76be309..c2d47afeae693794b8ac30c05e3c116956549924 100644 (file)
@@ -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."""
index fb16ae780b10e42a17e6e6f5220df190f8681c0a..ffc7104c8213f8d8736a0fdca575bde151ffc315 100644 (file)
@@ -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()