From cbabd91c21eb6fdee4786a3cd3195113fb0b8bed Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Fri, 9 May 2008 18:57:40 +0000 Subject: [PATCH] added query.subquery() as shorthand for query.statement.alias() --- doc/build/content/ormtutorial.txt | 6 +++--- lib/sqlalchemy/orm/query.py | 5 +++++ 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/doc/build/content/ormtutorial.txt b/doc/build/content/ormtutorial.txt index f784d57cf6..efbe4c9518 100644 --- a/doc/build/content/ormtutorial.txt +++ b/doc/build/content/ormtutorial.txt @@ -674,11 +674,11 @@ Using the `Query`, we build a statement like this from the inside out. The `sta {python} >>> from sqlalchemy.sql import func - >>> stmt = session.query(Address.user_id, func.count('*').label('address_count')).group_by(Address.user_id).statement.alias() + >>> stmt = session.query(Address.user_id, func.count('*').label('address_count')).group_by(Address.user_id).subquery() -The `func` keyword generates SQL functions, and the `alias()` method on `Select` (the return value of `query.statement`) creates a SQL alias, in this case an anonymous one which will have a generated name. +The `func` keyword generates SQL functions, and the `subquery()` method on `Query` produces a SQL expression construct representing a SELECT statement embedded within an alias (it's actually shorthand for `query.statement.alias()`). -Once we have our statement, it behaves like a `Table` construct, which we created for `users` at the top of this tutorial. The columns on the statement are accessible through an attribute called `c`: +Once we have our statement, it behaves like a `Table` construct, such as the one we created for `users` at the start of this tutorial. The columns on the statement are accessible through an attribute called `c`: {python} {sql}>>> for u, count in session.query(User, stmt.c.address_count).outerjoin((stmt, User.id==stmt.c.user_id)): # doctest: +NORMALIZE_WHITESPACE diff --git a/lib/sqlalchemy/orm/query.py b/lib/sqlalchemy/orm/query.py index a523027716..e39287b770 100644 --- a/lib/sqlalchemy/orm/query.py +++ b/lib/sqlalchemy/orm/query.py @@ -307,6 +307,11 @@ class Query(object): return self._compile_context(labels=self._with_labels).statement statement = property(statement) + def subquery(self): + """return the full SELECT statement represented by this Query, embedded within an Alias.""" + + return self.statement.alias() + def with_labels(self): """Apply column labels to the return value of Query.statement. -- 2.47.3