class documentation

class GenerativeSelect(DeprecatedSelectBaseGenerations, SelectBase):

Known subclasses: sqlalchemy.sql.expression.CompoundSelect, sqlalchemy.sql.expression.Select

View In Hierarchy

Base class for SELECT statements where additional elements can be added.

This serves as the base for _expression.Select and _expression.CompoundSelect where elements such as ORDER BY, GROUP BY can be added and column rendering can be controlled. Compare to _expression.TextualSelect, which, while it subclasses _expression.SelectBase and is also a SELECT construct, represents a fixed textual string which cannot be altered at this level, only wrapped as a subquery.

Method __init__ Undocumented
Method ​_offset​_or​_limit​_clause Convert the given value to an "offset or limit" clause.
Method ​_offset​_or​_limit​_clause​_asint Convert the "offset or limit" clause of a select construct to an integer.
Method ​_simple​_int​_clause True if the clause is a simple integer, False if it is not present or is a SQL expression.
Method apply​_labels Undocumented
Method fetch Return a new selectable with the given FETCH FIRST criterion applied.
Method get​_label​_style Retrieve the current label style.
Method group​_by Return a new selectable with the given list of GROUP BY criterion applied.
Method limit Return a new selectable with the given LIMIT criterion applied.
Method offset Return a new selectable with the given OFFSET criterion applied.
Method order​_by Return a new selectable with the given list of ORDER BY criteria applied.
Method set​_label​_style Return a new selectable with the specified label style.
Method slice Apply LIMIT / OFFSET to this statement based on a slice.
Method with​_for​_update Specify a FOR UPDATE clause for this _expression.GenerativeSelect.
Instance Variable ​_bind Undocumented
Instance Variable ​_fetch​_clause Undocumented
Instance Variable ​_fetch​_clause​_options Undocumented
Instance Variable ​_for​_update​_arg Undocumented
Instance Variable ​_group​_by​_clauses Undocumented
Instance Variable ​_label​_style Undocumented
Instance Variable ​_limit​_clause Undocumented
Instance Variable ​_offset​_clause Undocumented
Instance Variable ​_order​_by​_clauses Undocumented
Property ​_group​_by​_clause ClauseList access to group_by_clauses for legacy dialects
Property ​_has​_row​_limiting​_clause Undocumented
Property ​_limit No summary
Property ​_offset No summary
Property ​_order​_by​_clause ClauseList access to order_by_clauses for legacy dialects

Inherited from DeprecatedSelectBaseGenerations:

Method append​_group​_by Append the given GROUP BY criterion applied to this selectable.
Method append​_order​_by Append the given ORDER BY criterion applied to this selectable.

Inherited from SelectBase:

Method ​_ensure​_disambiguated​_names Ensure that the names generated by this selectbase will be disambiguated in some way, if possible.
Method ​_generate​_fromclause​_column​_proxies Undocumented
Method ​_implicit​_subquery Undocumented
Method ​_refresh​_for​_new​_column Undocumented
Method alias Return a named subquery against this _expression.SelectBase.
Method as​_scalar Undocumented
Method exists Return an _sql.Exists representation of this selectable, which can be used as a column expression.
Method label Return a 'scalar' representation of this selectable, embedded as a subquery with a label.
Method lateral Return a LATERAL alias of this _expression.Selectable.
Method scalar​_subquery Return a 'scalar' representation of this selectable, which can be used as a column expression.
Method select Undocumented
Method subquery Return a subquery of this _expression.SelectBase.
Class Variable ​_is​_select​_statement Undocumented
Class Variable is​_select Undocumented
Property ​_all​_selected​_columns A sequence of expressions that correspond to what is rendered in the columns clause, including _sql.TextClause constructs.
Property ​_from​_objects Undocumented
Property c Undocumented
Property columns Undocumented
Property exported​_columns No summary
Property selected​_columns A _expression.ColumnCollection representing the columns that this SELECT statement or similar construct returns in its result set.

Inherited from SelectStatementRole (via SelectBase):

Class Variable ​_role​_name Undocumented

Inherited from StatementRole (via SelectBase, SelectStatementRole):

Class Variable ​_propagate​_attrs Undocumented

Inherited from SQLRole (via SelectBase, SelectStatementRole, StatementRole):

Class Variable allows​_lambda Undocumented
Class Variable uses​_inspection Undocumented

Inherited from SQLRole (via SelectBase, SelectStatementRole, ReturnsRowsRole):

Class Variable allows​_lambda Undocumented
Class Variable uses​_inspection Undocumented

Inherited from DMLSelectRole (via SelectBase):

Class Variable ​_role​_name Undocumented

Inherited from SQLRole (via SelectBase, DMLSelectRole):

Class Variable allows​_lambda Undocumented
Class Variable uses​_inspection Undocumented

Inherited from CompoundElementRole (via SelectBase):

Class Variable ​_role​_name Undocumented

Inherited from AllowsLambdaRole (via SelectBase, CompoundElementRole):

Class Variable allows​_lambda Undocumented

Inherited from SQLRole (via SelectBase, CompoundElementRole):

Class Variable allows​_lambda Undocumented
Class Variable uses​_inspection Undocumented

Inherited from InElementRole (via SelectBase):

Class Variable ​_role​_name Undocumented

Inherited from SQLRole (via SelectBase, InElementRole):

Class Variable allows​_lambda Undocumented
Class Variable uses​_inspection Undocumented

Inherited from HasCTE (via SelectBase):

Method add​_cte Add a _sql.CTE to this statement object that will be independently rendered even if not referenced in the statement otherwise.
Method cte Return a new _expression.CTE, or Common Table Expression instance.
Class Variable ​_has​_ctes​_traverse​_internals Undocumented
Class Variable ​_independent​_ctes Undocumented

Inherited from ReturnsRowsRole (via SelectBase, HasCTE, HasCTERole):

Class Variable ​_role​_name Undocumented

Inherited from SQLRole (via SelectBase, HasCTE, HasCTERole, ReturnsRowsRole):

Class Variable allows​_lambda Undocumented
Class Variable uses​_inspection Undocumented

Inherited from Executable (via SelectBase):

Method ​_add​_context​_option Add a context option to this statement.
Method ​_set​_compile​_options Assign the compile options to a new value.
Method ​_update​_compile​_options update the _compile_options with new keys.
Method execute Compile and execute this .Executable.
Method execution​_options Set non-SQL options for the statement which take effect during execution.
Method get​_execution​_options Get the non-SQL options which will take effect during execution.
Method options Apply options to this statement.
Method scalar Compile and execute this .Executable, returning the result's scalar representation.
Class Variable ​_executable​_traverse​_internals Undocumented
Class Variable ​_with​_context​_options Undocumented
Class Variable ​_with​_options Undocumented
Class Variable is​_delete Undocumented
Class Variable is​_dml Undocumented
Class Variable is​_insert Undocumented
Class Variable is​_text Undocumented
Class Variable is​_update Undocumented
Class Variable supports​_execution Undocumented
Instance Variable ​_compile​_options Undocumented
Instance Variable ​_execution​_options Undocumented
Property ​_effective​_plugin​_target Undocumented
Property bind Returns the _engine.Engine or _engine.Connection to which this .Executable is bound, or None if none found.

Inherited from StatementRole (via SelectBase, Executable):

Class Variable ​_propagate​_attrs Undocumented
Class Variable ​_role​_name Undocumented

Inherited from SQLRole (via SelectBase, Executable, StatementRole):

Class Variable allows​_lambda Undocumented
Class Variable uses​_inspection Undocumented

Inherited from Generative (via SelectBase, Executable):

Method ​_generate Undocumented

Inherited from SupportsCloneAnnotations (via SelectBase):

Method ​_annotate return a copy of this ClauseElement with annotations updated by the given dictionary.
Method ​_deannotate return a copy of this _expression.ClauseElement with annotations removed.
Method ​_with​_annotations return a copy of this ClauseElement with annotations replaced by the given dictionary.
Class Variable ​_clone​_annotations​_traverse​_internals Undocumented

Inherited from SupportsAnnotations (via SelectBase, SupportsCloneAnnotations):

Property ​_annotations​_cache​_key Undocumented

Inherited from Selectable (via SelectBase):

Method corresponding​_column No summary
Method replace​_selectable Replace all occurrences of _expression.FromClause 'old' with the given _expression.Alias object, returning a copy of this _expression.FromClause.
Class Variable __visit​_name__ Undocumented
Class Variable is​_selectable Undocumented

Inherited from ReturnsRows (via SelectBase, Selectable):

Class Variable ​_is​_from​_clause Undocumented
Class Variable ​_is​_lateral Undocumented
Class Variable ​_is​_returns​_rows Undocumented
Property selectable Undocumented

Inherited from ReturnsRowsRole (via SelectBase, Selectable, ReturnsRows):

Class Variable ​_role​_name Undocumented

Inherited from SQLRole (via SelectBase, Selectable, ReturnsRows, ReturnsRowsRole):

Class Variable allows​_lambda Undocumented
Class Variable uses​_inspection Undocumented

Inherited from ClauseElement (via SelectBase, Selectable, ReturnsRows):

Method compare Compare this _expression.ClauseElement to the given _expression.ClauseElement.
Method compile Compile this SQL expression.
Method params Return a copy with _expression.bindparam elements replaced.
Method self​_group Apply a 'grouping' to this _expression.ClauseElement.
Method unique​_params Return a copy with _expression.bindparam elements replaced.
Method __bool__ Undocumented
Method __getstate__ Undocumented
Method __invert__ Undocumented
Method __repr__ Undocumented
Method __str__ Undocumented
Method ​_clone Create a shallow copy of this ClauseElement.
Method ​_cloned​_set Return the set consisting all cloned ancestors of this ClauseElement.
Method ​_compile​_w​_cache Undocumented
Method ​_compiler Return a compiler appropriate for this ClauseElement, given a Dialect.
Method ​_execute​_on​_connection Undocumented
Method ​_negate Undocumented
Method ​_negate​_in​_binary a hook to allow the right side of a binary expression to respond to a negation of the binary expression.
Method ​_replace​_params Undocumented
Method ​_set​_propagate​_attrs Undocumented
Method ​_ungroup Return this _expression.ClauseElement without any groupings.
Method ​_with​_binary​_element​_type in the context of binary expression, convert the type of this object to the one given.
Class Variable ​_cache​_key​_traversal Undocumented
Class Variable ​_is​_bind​_parameter Undocumented
Class Variable ​_is​_clause​_list Undocumented
Class Variable ​_is​_clone​_of Undocumented
Class Variable ​_is​_from​_container Undocumented
Class Variable ​_is​_immutable Undocumented
Class Variable ​_is​_lambda​_element Undocumented
Class Variable ​_is​_select​_container Undocumented
Class Variable ​_is​_singleton​_constant Undocumented
Class Variable ​_is​_text​_clause Undocumented
Class Variable ​_is​_textual Undocumented
Class Variable ​_order​_by​_label​_element Undocumented
Class Variable bind Undocumented
Class Variable description Undocumented
Class Variable is​_clause​_element Undocumented
Class Variable stringify​_dialect Undocumented
Class Variable supports​_execution Undocumented
Instance Variable ​_propagate​_attrs like annotations, however these propagate outwards liberally as SQL constructs are built, and are set up at construction time.
Property ​_constructor return the 'constructor' for this ClauseElement.
Property entity​_namespace Undocumented

Inherited from SQLRole (via SelectBase, Selectable, ReturnsRows, ClauseElement):

Class Variable allows​_lambda Undocumented
Class Variable uses​_inspection Undocumented

Inherited from SupportsWrappingAnnotations (via SelectBase, Selectable, ReturnsRows, ClauseElement):

Method ​_annotate return a copy of this ClauseElement with annotations updated by the given dictionary.
Method ​_deannotate return a copy of this _expression.ClauseElement with annotations removed.
Method ​_with​_annotations return a copy of this ClauseElement with annotations replaced by the given dictionary.

Inherited from SupportsAnnotations (via SelectBase, Selectable, ReturnsRows, ClauseElement, SupportsWrappingAnnotations):

Property ​_annotations​_cache​_key Undocumented

Inherited from MemoizedHasCacheKey (via SelectBase, Selectable, ReturnsRows, ClauseElement):

Method ​_generate​_cache​_key return a cache key.

Inherited from HasCacheKey (via SelectBase, Selectable, ReturnsRows, ClauseElement, MemoizedHasCacheKey):

Class Variable inherit​_cache Indicate if this .HasCacheKey instance should make use of the cache key generation scheme used by its immediate superclass.
Class Method ​_generate​_cache​_attrs generate cache key dispatcher for a new class.
Class Method ​_generate​_cache​_key​_for​_object Undocumented
Method ​_gen​_cache​_key return an optional cache key.
Class Variable __slots__ Undocumented
Class Variable ​_hierarchy​_supports​_caching private attribute which may be set to False to prevent the inherit_cache warning from being emitted for a hierarchy of subclasses.
Class Variable ​_is​_has​_cache​_key Undocumented

Inherited from HasCopyInternals (via SelectBase, Selectable, ReturnsRows, ClauseElement):

Method ​_copy​_internals Reassign internal elements to be clones of themselves.

Inherited from Traversible (via SelectBase, Selectable, ReturnsRows, ClauseElement):

Method get​_children Return immediate child .visitors.Traversible elements of this .visitors.Traversible.
Method __class​_getitem__ Undocumented
@util.deprecated_params(bind=('2.0', 'The :paramref:`_sql.select.bind` argument is deprecated and will be removed in SQLAlchemy 2.0.'))
def __init__(self, _label_style=LABEL_STYLE_DEFAULT, use_labels=False, limit=None, offset=None, order_by=None, group_by=None, bind=None):
def _offset_or_limit_clause(self, element, name=None, type_=None):

Convert the given value to an "offset or limit" clause.

This handles incoming integers and converts to an expression; if an expression is already given, it is passed through.

def _offset_or_limit_clause_asint(self, clause, attrname):

Convert the "offset or limit" clause of a select construct to an integer.

This is only possible if the value is stored as a simple bound parameter. Otherwise, a compilation error is raised.

def _simple_int_clause(self, clause):
True if the clause is a simple integer, False if it is not present or is a SQL expression.
@util.deprecated_20(':meth:`_sql.GenerativeSelect.apply_labels`', alternative='Use set_label_style(LABEL_STYLE_TABLENAME_PLUS_COL) instead.')
def apply_labels(self):

Undocumented

@_generative
def fetch(self, count, with_ties=False, percent=False):

Return a new selectable with the given FETCH FIRST criterion applied.

This is a numeric value which usually renders as FETCH {FIRST | NEXT} [ count ] {ROW | ROWS} {ONLY | WITH TIES} expression in the resulting select. This functionality is is currently implemented for Oracle, PostgreSQL, MSSQL.

Use _sql.GenerativeSelect.offset to specify the offset.

Note

The _sql.GenerativeSelect.fetch method will replace any clause applied with _sql.GenerativeSelect.limit.

New in version 1.4.

See Also

_sql.GenerativeSelect.limit

_sql.GenerativeSelect.offset

Parameters
countan integer COUNT parameter, or a SQL expression that provides an integer result. When percent=True this will represent the percentage of rows to return, not the absolute value. Pass None to reset it.
with​_tiesWhen True, the WITH TIES option is used to return any additional rows that tie for the last place in the result set according to the ORDER BY clause. The ORDER BY may be mandatory in this case. Defaults to False
percentWhen True, count represents the percentage of the total number of selected rows to return. Defaults to False
def get_label_style(self):

Retrieve the current label style.

New in version 1.4.
@_generative
def group_by(self, *clauses):

Return a new selectable with the given list of GROUP BY criterion applied.

All existing GROUP BY settings can be suppressed by passing None.

e.g.:

stmt = select(table.c.name, func.max(table.c.stat)).\
group_by(table.c.name)
Parameters
*clausesa series of _expression.ColumnElement constructs which will be used to generate an GROUP BY clause.
@_generative
def limit(self, limit):

Return a new selectable with the given LIMIT criterion applied.

This is a numerical value which usually renders as a LIMIT expression in the resulting select. Backends that don't support LIMIT will attempt to provide similar functionality.

Note

The _sql.GenerativeSelect.limit method will replace any clause applied with _sql.GenerativeSelect.fetch.

Changed in version 1.0.0: - _expression.Select.limit can now accept arbitrary SQL expressions as well as integer values.

See Also

_sql.GenerativeSelect.fetch

_sql.GenerativeSelect.offset

Parameters
limitan integer LIMIT parameter, or a SQL expression that provides an integer result. Pass None to reset it.
@_generative
def offset(self, offset):

Return a new selectable with the given OFFSET criterion applied.

This is a numeric value which usually renders as an OFFSET expression in the resulting select. Backends that don't support OFFSET will attempt to provide similar functionality.

Changed in version 1.0.0: - _expression.Select.offset can now accept arbitrary SQL expressions as well as integer values.

See Also

_sql.GenerativeSelect.limit

_sql.GenerativeSelect.fetch

Parameters
offsetan integer OFFSET parameter, or a SQL expression that provides an integer result. Pass None to reset it.
@_generative
def order_by(self, *clauses):

Return a new selectable with the given list of ORDER BY criteria applied.

e.g.:

stmt = select(table).order_by(table.c.id, table.c.name)

All existing ORDER BY criteria may be cancelled by passing None by itself. New ORDER BY criteria may then be added by invoking _sql.Select.order_by again, e.g.:

# will erase all ORDER BY and ORDER BY new_col alone
stmt = stmt.order_by(None).order_by(new_col)
Parameters
*clausesa series of _expression.ColumnElement constructs which will be used to generate an ORDER BY clause.
def set_label_style(self, style):

Return a new selectable with the specified label style.

There are three "label styles" available, _sql.LABEL_STYLE_DISAMBIGUATE_ONLY, _sql.LABEL_STYLE_TABLENAME_PLUS_COL, and _sql.LABEL_STYLE_NONE. The default style is _sql.LABEL_STYLE_TABLENAME_PLUS_COL.

In modern SQLAlchemy, there is not generally a need to change the labeling style, as per-expression labels are more effectively used by making use of the _sql.ColumnElement.label method. In past versions, _sql.LABEL_STYLE_TABLENAME_PLUS_COL was used to disambiguate same-named columns from different tables, aliases, or subqueries; the newer _sql.LABEL_STYLE_DISAMBIGUATE_ONLY now applies labels only to names that conflict with an existing name so that the impact of this labeling is minimal.

The rationale for disambiguation is mostly so that all column expressions are available from a given _sql.FromClause.c collection when a subquery is created.

New in version 1.4: - the _sql.GenerativeSelect.set_label_style method replaces the previous combination of .apply_labels(), .with_labels() and use_labels=True methods and/or parameters.

See Also

_sql.LABEL_STYLE_DISAMBIGUATE_ONLY

_sql.LABEL_STYLE_TABLENAME_PLUS_COL

_sql.LABEL_STYLE_NONE

_sql.LABEL_STYLE_DEFAULT

@_generative
@util.preload_module('sqlalchemy.sql.util')
def slice(self, start, stop):

Apply LIMIT / OFFSET to this statement based on a slice.

The start and stop indices behave like the argument to Python's built-in range function. This method provides an alternative to using LIMIT/OFFSET to get a slice of the query.

For example,

stmt = select(User).order_by(User).id.slice(1, 3)

renders as

SELECT users.id AS users_id,
       users.name AS users_name
FROM users ORDER BY users.id
LIMIT ? OFFSET ?
(2, 1)

Note

The _sql.GenerativeSelect.slice method will replace any clause applied with _sql.GenerativeSelect.fetch.

New in version 1.4: Added the _sql.GenerativeSelect.slice method generalized from the ORM.

See Also

_sql.GenerativeSelect.limit

_sql.GenerativeSelect.offset

_sql.GenerativeSelect.fetch

@_generative
def with_for_update(self, nowait=False, read=False, of=None, skip_locked=False, key_share=False):

Specify a FOR UPDATE clause for this _expression.GenerativeSelect.

E.g.:

stmt = select(table).with_for_update(nowait=True)

On a database like PostgreSQL or Oracle, the above would render a statement like:

SELECT table.a, table.b FROM table FOR UPDATE NOWAIT

on other backends, the nowait option is ignored and instead would produce:

SELECT table.a, table.b FROM table FOR UPDATE

When called with no arguments, the statement will render with the suffix FOR UPDATE. Additional arguments can then be provided which allow for common database-specific variants.

Parameters
nowaitboolean; will render FOR UPDATE NOWAIT on Oracle and PostgreSQL dialects.
readboolean; will render LOCK IN SHARE MODE on MySQL, FOR SHARE on PostgreSQL. On PostgreSQL, when combined with nowait, will render FOR SHARE NOWAIT.
ofSQL expression or list of SQL expression elements (typically _schema.Column objects or a compatible expression) which will render into a FOR UPDATE OF clause; supported by PostgreSQL and Oracle. May render as a table or as a column depending on backend.
skip​_lockedboolean, will render FOR UPDATE SKIP LOCKED on Oracle and PostgreSQL dialects or FOR SHARE SKIP LOCKED if read=True is also specified.
key​_shareboolean, will render FOR NO KEY UPDATE, or if combined with read=True will render FOR KEY SHARE, on the PostgreSQL dialect.
_fetch_clause =

Undocumented

_fetch_clause_options =

Undocumented

_for_update_arg =

Undocumented

_group_by_clauses: tuple =

Undocumented

_label_style =

Undocumented

_limit_clause =

Undocumented

_offset_clause =

Undocumented

_order_by_clauses: tuple =

Undocumented

@property
_group_by_clause =
ClauseList access to group_by_clauses for legacy dialects
@property
_has_row_limiting_clause =

Undocumented

@property
_limit =
Get an integer value for the limit. This should only be used by code that cannot support a limit as a BindParameter or other custom clause as it will throw an exception if the limit isn't currently set to an integer.
@property
_offset =
Get an integer value for the offset. This should only be used by code that cannot support an offset as a BindParameter or other custom clause as it will throw an exception if the offset isn't currently set to an integer.
@property
_order_by_clause =
ClauseList access to order_by_clauses for legacy dialects