File: //opt/alt/python27/lib/python2.7/site-packages/sqlalchemy/dialects/postgresql/dml.pyc
�
���ec @ s4 d d l m Z d d l m Z d d l m Z d d l m Z d d l m Z d d l m Z d d l m Z d d l m
Z
d d
l m Z
d d l m Z d d l m Z d d
l m Z d Z d e
f d � � YZ e e d d � Z d e f d � � YZ d e f d � � YZ d e f d � � YZ d S( i ( t exti ( t util( t coercions( t roles( t schema( t _exclusive_against( t _generative( t ColumnCollection( t Insert( t
ClauseElement( t alias( t public_factoryR t insertc B s� e Z d Z d Z e Z e j d � � Z e d d i d d 6�Z
e e
d d d d d d � � � Z
e e
d d d d � � � Z RS( s PostgreSQL-specific implementation of INSERT.
Adds methods for PG-specific syntaxes such as ON CONFLICT.
The :class:`_postgresql.Insert` object is created using the
:func:`sqlalchemy.dialects.postgresql.insert` function.
.. versionadded:: 1.1
t
postgresqlc C s t | j d d �j S( sk Provide the ``excluded`` namespace for an ON CONFLICT statement
PG's ON CONFLICT clause allows reference to the row that would
be inserted, known as ``excluded``. This attribute provides
all columns in this row to be referenceable.
.. tip:: The :attr:`_postgresql.Insert.excluded` attribute is an
instance of :class:`_expression.ColumnCollection`, which provides
an interface the same as that of the :attr:`_schema.Table.c`
collection described at :ref:`metadata_tables_and_columns`.
With this collection, ordinary names are accessible like attributes
(e.g. ``stmt.excluded.some_column``), but special names and
dictionary method names should be accessed using indexed access,
such as ``stmt.excluded["column name"]`` or
``stmt.excluded["values"]``. See the docstring for
:class:`_expression.ColumnCollection` for further examples.
.. seealso::
:ref:`postgresql_insert_on_conflict` - example of how
to use :attr:`_expression.Insert.excluded`
t namet excluded( R
t tablet columns( t self( ( sS /opt/alt/python27/lib/python2.7/site-packages/sqlalchemy/dialects/postgresql/dml.pyR ( s t _post_values_clauset msgssC This Insert construct already has an ON CONFLICT clause establishedc C s t | | | | | � | _ d S( ss
Specifies a DO UPDATE SET action for ON CONFLICT clause.
Either the ``constraint`` or ``index_elements`` argument is
required, but only one of these can be specified.
:param constraint:
The name of a unique or exclusion constraint on the table,
or the constraint object itself if it has a .name attribute.
:param index_elements:
A sequence consisting of string column names, :class:`_schema.Column`
objects, or other column expression objects that will be used
to infer a target index.
:param index_where:
Additional WHERE criterion that can be used to infer a
conditional target index.
:param set\_:
A dictionary or other mapping object
where the keys are either names of columns in the target table,
or :class:`_schema.Column` objects or other ORM-mapped columns
matching that of the target table, and expressions or literals
as values, specifying the ``SET`` actions to take.
.. versionadded:: 1.4 The
:paramref:`_postgresql.Insert.on_conflict_do_update.set_`
parameter supports :class:`_schema.Column` objects from the target
:class:`_schema.Table` as keys.
.. warning:: This dictionary does **not** take into account
Python-specified default UPDATE values or generation functions,
e.g. those specified using :paramref:`_schema.Column.onupdate`.
These values will not be exercised for an ON CONFLICT style of
UPDATE, unless they are manually specified in the
:paramref:`.Insert.on_conflict_do_update.set_` dictionary.
:param where:
Optional argument. If present, can be a literal SQL
string or an acceptable expression for a ``WHERE`` clause
that restricts the rows affected by ``DO UPDATE SET``. Rows
not meeting the ``WHERE`` condition will not be updated
(effectively a ``DO NOTHING`` for those rows).
.. versionadded:: 1.1
.. seealso::
:ref:`postgresql_insert_on_conflict`
N( t OnConflictDoUpdateR ( R t
constraintt index_elementst index_wheret set_t where( ( sS /opt/alt/python27/lib/python2.7/site-packages/sqlalchemy/dialects/postgresql/dml.pyt on_conflict_do_updateK s ?c C s t | | | � | _ d S( s)
Specifies a DO NOTHING action for ON CONFLICT clause.
The ``constraint`` and ``index_elements`` arguments
are optional, but only one of these can be specified.
:param constraint:
The name of a unique or exclusion constraint on the table,
or the constraint object itself if it has a .name attribute.
:param index_elements:
A sequence consisting of string column names, :class:`_schema.Column`
objects, or other column expression objects that will be used
to infer a target index.
:param index_where:
Additional WHERE criterion that can be used to infer a
conditional target index.
.. versionadded:: 1.1
.. seealso::
:ref:`postgresql_insert_on_conflict`
N( t OnConflictDoNothingR ( R R R R ( ( sS /opt/alt/python27/lib/python2.7/site-packages/sqlalchemy/dialects/postgresql/dml.pyt on_conflict_do_nothing� s N( t __name__t
__module__t __doc__t stringify_dialectt Falset
inherit_cacheR t memoized_propertyR R t _on_conflict_exclusiveR t NoneR R ( ( ( sS /opt/alt/python27/lib/python2.7/site-packages/sqlalchemy/dialects/postgresql/dml.pyR s$
;s .dialects.postgresql.inserts .dialects.postgresql.Insertt OnConflictClausec B s e Z d Z d d d d � Z RS( R
c C s} | d k rU t | t j � rU t | t j t j f � rU t | d � pL | } qU n | d k r)| d k r| t d � � n t | t j � r� | | _
d | _ d | _ q)t | t j
� r� | j } | j d j d � } q)t | t j � r| j } | j } q)| j } | j d j d � } n | d k rSd | _
| | _ | | _ n&