def value(self, column):
"""Return a scalar result corresponding to the given column expression."""
-
- return self.values(column).next()[0]
-
+ try:
+ return self.values(column).next()[0]
+ except StopIteration:
+ return None
+
@_generative()
def add_column(self, column):
"""Add a SQL ColumnElement to the list of result columns to be returned."""
<Item>
>>> session.query(Item.id).scalar()
1
+ >>> session.query(Item.id).filter(Item.id < 0).scalar()
+ None
>>> session.query(Item.id, Item.name).scalar()
1
>>> session.query(func.count(Parent.id)).scalar()
This results in an execution of the underlying query.
"""
- ret = list(self)[0]
- if not isinstance(ret, tuple):
- return ret
try:
+ ret = list(self)[0]
+ if not isinstance(ret, tuple):
+ return ret
return ret[0]
except IndexError:
return None
self.assertRaises(sa.orm.exc.MultipleResultsFound,
sess.query(User, Address).join(User.addresses).one)
-
@testing.future
def test_getslice(self):
assert False
+ @testing.resolve_artifact_names
+ def test_scalar(self):
+ sess = create_session()
+
+ eq_(sess.query(User.id).filter_by(id=7).scalar(), 7)
+ eq_(sess.query(User.id, User.name).filter_by(id=7).scalar(), 7)
+ eq_(sess.query(User.id).filter_by(id=0).scalar(), None)
+ eq_(sess.query(User).filter_by(id=7).scalar(),
+ sess.query(User).filter_by(id=7).one())
+
+ @testing.resolve_artifact_names
+ def test_value(self):
+ sess = create_session()
+
+ eq_(sess.query(User).filter_by(id=7).value(User.id), 7)
+ eq_(sess.query(User.id, User.name).filter_by(id=7).value(User.id), 7)
+ eq_(sess.query(User).filter_by(id=0).value(User.id), None)
+
+ sess.bind = sa.testing.db
+ eq_(sess.query().value(sa.literal_column('1')), 1)
+
class SelectFromTest(QueryTest):
keep_mappers = False