관리-도구
편집 파일: dml.cpython-37.pyc
B ��4]� � @ s� d dl mZ ddl mZ ddlmZ ddlmZ ddlmZ ddl mZ ddlm Z dd lmZ d ZG dd� de �Zeed �ZG dd� de�ZG dd� de�ZG dd� de�ZdS )� )�ext� )�util)�schema)�_generative)�Insert)� ClauseElement)�alias)�public_factory)r �insertc @ s: e Zd ZdZejdd� �Zed dd��Zed dd��Z dS )r z�PostgreSQL-specific implementation of INSERT. Adds methods for PG-specific syntaxes such as ON CONFLICT. .. versionadded:: 1.1 c C s t | jdd�jS )a� 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. .. seealso:: :ref:`postgresql_insert_on_conflict` - example of how to use :attr:`.Insert.excluded` �excluded)�name)r �table�columns)�self� r �U/opt/alt/python37/lib64/python3.7/site-packages/sqlalchemy/dialects/postgresql/dml.pyr s zInsert.excludedNc C s t |||||�| _| S )a 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:`.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\_: Required argument. A dictionary or other mapping object with column names as keys and expressions or literals as values, specifying the ``SET`` actions to take. If the target :class:`.Column` specifies a ".key" attribute distinct from the column name, that key should be used. .. warning:: This dictionary does **not** take into account Python-specified default UPDATE values or generation functions, e.g. those specified using :paramref:`.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` )�OnConflictDoUpdate�_post_values_clause)r � constraint�index_elements�index_where�set_�wherer r r �on_conflict_do_update. s 9zInsert.on_conflict_do_updatec C s t |||�| _| S )a" 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:`.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` )�OnConflictDoNothingr )r r r r r r r �on_conflict_do_nothingl s zInsert.on_conflict_do_nothing)NNNNN)NNN) �__name__� __module__�__qualname__�__doc__r Zmemoized_propertyr r r r r r r r r s 7r z.dialects.postgresql.insertc @ s e Zd Zddd�ZdS )�OnConflictClauseNc C s� |d k r8t |tj�s8t |tjtjtjf�r8t|d�p6|}|d k r�|d k rPt d��t |tj�rp|| _ d | _d | _nTt |tj�r�|j }|jd �d�}n0t |tj�r�|j}|j}n|j}|jd �d�}|d k r�d | _ || _|| _n|d kr�d | _ | _| _d S )Nr z8'constraint' and 'index_elements' are mutually exclusive� postgresqlr )� isinstancer �string_typesr �IndexZ Constraintr ZExcludeConstraint�getattr� ValueError�constraint_target�inferred_target_elementsZinferred_target_whereclauseZexpressionsZdialect_options�getr r )r r r r r r r �__init__� s: zOnConflictClause.__init__)NNN)r r r r+ r r r r r! � s r! c @ s e Zd ZdZdS )r r N)r r r �__visit_name__r r r r r � s r c s"