From: Mike Bayer Date: Wed, 1 Feb 2006 23:26:18 +0000 (+0000) Subject: might add scalar() to select which does limit=1 X-Git-Tag: rel_0_1_0~82 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b3a610dbc0eaaced4c529dc7c7dbf1cd2b503abc;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git might add scalar() to select which does limit=1 --- diff --git a/lib/sqlalchemy/sql.py b/lib/sqlalchemy/sql.py index dcf153866e..4ab1f18713 100644 --- a/lib/sqlalchemy/sql.py +++ b/lib/sqlalchemy/sql.py @@ -293,6 +293,10 @@ class Compiled(ClauseVisitor): """executes this compiled object via the execute() method, then returns the first column of the first row. Useful for executing functions, sequences, rowcounts, etc.""" + # we are still going off the assumption that fetching only the first row + # in a result set is not performance-wise any different than specifying limit=1 + # else we'd have to construct a copy of the select() object with the limit + # installed (else if we change the existing select, not threadsafe) row = self.execute(*multiparams, **params).fetchone() if row is not None: return row[0] @@ -399,6 +403,10 @@ class ClauseElement(object): """executes this SQL expression via the execute() method, then returns the first column of the first row. Useful for executing functions, sequences, rowcounts, etc.""" + # we are still going off the assumption that fetching only the first row + # in a result set is not performance-wise any different than specifying limit=1 + # else we'd have to construct a copy of the select() object with the limit + # installed (else if we change the existing select, not threadsafe) row = self.execute(*multiparams, **params).fetchone() if row is not None: return row[0] @@ -1324,6 +1332,13 @@ class Select(SelectBaseMixin, FromClause): def union_all(self, other, **kwargs): return union_all(self, other, **kwargs) +# def scalar(self, *multiparams, **params): + # need to set limit=1, but only in this thread. + # we probably need to make a copy of the select(). this + # is expensive. I think cursor.fetchone(), then discard remaining results + # should be fine with most DBs + # for now use base scalar() method + def _find_engine(self): """tries to return a SQLEngine, either explicitly set in this object, or searched within the from clauses for one"""