summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2014-01-26 01:04:41 -0500
committerMike Bayer <mike_mp@zzzcomputing.com>2014-01-26 01:04:41 -0500
commitae3f2abe06af5541d19f30d716806a47c8472098 (patch)
tree579a32d09ea7183b9d83af559467447c4ec3de6c
parent9ad0e9a842be2e365d81c2fc23931108fa691094 (diff)
downloadsqlalchemy-ae3f2abe06af5541d19f30d716806a47c8472098.tar.gz
updates
-rw-r--r--lib/sqlalchemy/sql/elements.py139
1 files changed, 87 insertions, 52 deletions
diff --git a/lib/sqlalchemy/sql/elements.py b/lib/sqlalchemy/sql/elements.py
index 536058a50..2963ef1a5 100644
--- a/lib/sqlalchemy/sql/elements.py
+++ b/lib/sqlalchemy/sql/elements.py
@@ -46,7 +46,7 @@ def collate(expression, collation):
operators.collate, type_=expr.type)
def between(expr, lower_bound, upper_bound):
- """Produce ``BETWEEN`` predicate clause.
+ """Produce a ``BETWEEN`` predicate clause.
E.g.::
@@ -722,7 +722,7 @@ class ColumnElement(ClauseElement, operators.ColumnOperators):
class BindParameter(ColumnElement):
- """Represent a "bound expression" for usage in a SQL construct.
+ """Represent a "bound expression".
:class:`.BindParameter` is invoked explicitly using the
:func:`.bindparam` function, as in::
@@ -751,7 +751,7 @@ class BindParameter(ColumnElement):
isoutparam=False,
_compared_to_operator=None,
_compared_to_type=None):
- """Produce a "bound expression" for usage in a SQL construct.
+ """Produce a "bound expression".
The return value is an instance of :class:`.BindParameter`; this
is a :class:`.ColumnElement` subclass which represents a so-called
@@ -1705,7 +1705,7 @@ class BooleanClauseList(ClauseList, ColumnElement):
@classmethod
def and_(cls, *clauses):
- """Produce a conjunction of clauses joined by ``AND``.
+ """Produce a conjunction of expressions joined by ``AND``.
E.g.::
@@ -1746,7 +1746,7 @@ class BooleanClauseList(ClauseList, ColumnElement):
@classmethod
def or_(cls, *clauses):
- """Produce a conjunction of clauses joined by ``OR``.
+ """Produce a conjunction of expressions joined by ``OR``.
E.g.::
@@ -1865,7 +1865,7 @@ class Case(ColumnElement):
__visit_name__ = 'case'
def __init__(self, whens, value=None, else_=None):
- """Produce a ``CASE`` expression for usage in a SQL construct.
+ """Produce a ``CASE`` expression.
The ``CASE`` construct in SQL is a conditional object that
acts somewhat analogously to an "if/then" construct in other
@@ -2145,6 +2145,10 @@ class UnaryExpression(ColumnElement):
(where it is called the 'operator') or right (where it is called the
'modifier') of the column expression.
+ :class:`.UnaryExpression` is the basis for several unary operators
+ including those used by :func:`.desc`, :func:`.asc`, :func:`.distinct`,
+ :func:`.nullsfirst` and :func:`.nullslast`.
+
"""
__visit_name__ = 'unary'
@@ -2238,7 +2242,7 @@ class UnaryExpression(ColumnElement):
@classmethod
def _create_desc(cls, column):
- """Return a descending ``ORDER BY`` clause element.
+ """Produce a descending ``ORDER BY`` clause element.
e.g.::
@@ -2276,7 +2280,7 @@ class UnaryExpression(ColumnElement):
@classmethod
def _create_asc(cls, column):
- """Return an ascending ``ORDER BY`` clause element.
+ """Produce an ascending ``ORDER BY`` clause element.
e.g.::
@@ -2715,7 +2719,20 @@ class Label(ColumnElement):
class ColumnClause(Immutable, ColumnElement):
- """Represents a generic column expression from any textual string.
+ """Represents a column expression from any textual string.
+
+ The :class:`.ColumnClause`, a lightweight analogue to the
+ :class:`.Column` class, is typically invoked using the
+ :func:`.column` function, as in::
+
+ from sqlalchemy.sql import column
+
+ id, name = column("id"), column("name")
+ stmt = select([id, name]).select_from("user")
+
+ The above statement would produce SQL like::
+
+ SELECT id, name FROM user
:class:`.ColumnClause` is the immediate superclass of the schema-specific
:class:`.Column` object. While the :class:`.Column` class has all the
@@ -2726,58 +2743,74 @@ class ColumnClause(Immutable, ColumnElement):
that :class:`.Column` does, so in that sense is a "lightweight" version
of :class:`.Column`.
- :class:`.ColumnClause` is constructed by itself typically via
- the :func:`~.expression.column` function. The datatype is optional.
- It may be placed directly
- into constructs such as :func:`.select` constructs::
+ Full details on :class:`.ColumnClause` usage is at :func:`.column`.
- from sqlalchemy.sql import column, select
+ .. seealso::
- c1, c2 = column("c1"), column("c2")
- s = select([c1, c2]).where(c1==5)
+ :func:`.column`
- There is also a variant on :func:`~.expression.column` known
- as :func:`~.expression.literal_column` - the difference is that
- in the latter case, the string value is assumed to be an exact
- expression, rather than a column name, so that no quoting rules
- or similar are applied::
+ :class:`.Column`
- from sqlalchemy.sql import literal_column, select
+ """
+ __visit_name__ = 'column'
- s = select([literal_column("5 + 7")])
+ onupdate = default = server_default = server_onupdate = None
- :class:`.ColumnClause` can also be used in a table-like
- fashion by combining the :func:`~.expression.column` function
- with the :func:`~.expression.table` function, to produce
- a "lightweight" form of table metadata::
+ _memoized_property = util.group_expirable_memoized_property()
- from sqlalchemy.sql import table, column
+ def __init__(self, text, type_=None, is_literal=False, _selectable=None):
+ """Produce a :class:`.ColumnClause` object.
- user = table("user",
- column("id"),
- column("name"),
- column("description"),
- )
+ The :class:`.ColumnClause` is a lightweight analogue to the
+ :class:`.Column` class. The :func:`.column` function can
+ be invoked with just a name alone, as in::
- The above construct can be created in an ad-hoc fashion and is
- not associated with any :class:`.schema.MetaData`, unlike it's
- more full fledged :class:`.schema.Table` counterpart.
+ from sqlalchemy.sql import column
- .. seealso::
+ id, name = column("id"), column("name")
+ stmt = select([id, name]).select_from("user")
- :class:`.Column`
+ The above statement would produce SQL like::
- :ref:`metadata_toplevel`
+ SELECT id, name FROM user
- """
- __visit_name__ = 'column'
+ Once constructed, :func:`.column` may be used like any other SQL expression
+ element such as within :func:`.select` constructs::
- onupdate = default = server_default = server_onupdate = None
+ from sqlalchemy.sql import column
- _memoized_property = util.group_expirable_memoized_property()
+ id, name = column("id"), column("name")
+ stmt = select([id, name]).select_from("user")
- def __init__(self, text, type_=None, is_literal=False, _selectable=None):
- """Construct a :class:`.ColumnClause` object.
+ The text handled by :func:`.column` is assumed to be handled
+ like the name of a database column; if the string contains mixed case,
+ special characters, or matches a known reserved word on the target
+ backend, the column expression will render using the quoting
+ behavior determined by the backend. To produce a textual SQL
+ expression that is rendered exactly without any quoting,
+ use :func:`.literal_column` instead, or pass ``True`` as the
+ value of :paramref:`.column.is_literal`. Additionally, full SQL
+ statements are best handled using the :func:`.text` construct.
+
+ :func:`.column` can be used in a table-like
+ fashion by combining it with the :func:`.table` function
+ (which is the lightweight analogue to :class:`.Table`) to produce
+ a working table construct with minimal boilerplate::
+
+ from sqlalchemy.sql import table, column
+
+ user = table("user",
+ column("id"),
+ column("name"),
+ column("description"),
+ )
+
+ stmt = select([user.c.description]).where(user.c.name == 'wendy')
+
+ A :func:`.column` / :func:`.table` construct like that illustrated
+ above can be created in an
+ ad-hoc fashion and is not associated with any :class:`.schema.MetaData`,
+ DDL, or events, unlike its :class:`.Table` counterpart.
:param text: the text of the element.
@@ -2787,16 +2820,18 @@ class ColumnClause(Immutable, ColumnElement):
:param is_literal: if True, the :class:`.ColumnClause` is assumed to
be an exact expression that will be delivered to the output with no
quoting rules applied regardless of case sensitive settings. the
- :func:`literal_column()` function is usually used to create such a
- :class:`.ColumnClause`.
+ :func:`.literal_column()` function essentially invokes :func:`.column`
+ while passing ``is_literal=True``.
+
+ .. seealso::
+
+ :class:`.Column`
- :param text: the name of the column. Quoting rules will be applied
- to the clause like any other column name. For textual column constructs
- that are not to be quoted, use the :func:`literal_column` function.
+ :func:`.literal_column`
- :param type\_: an optional :class:`~sqlalchemy.types.TypeEngine` object
- which will provide result-set translation for this column.
+ :func:`.text`
+ :ref:`metadata_toplevel`
"""