U a~@sddlmZddlmZddlmZddlmZddlmZddlmZddl m Z ddl m Z dd lmZdd lmZd ZGd d d e Z ee ddZGddde ZGdddeZGdddeZdS))util) coercions)roles)_exclusive_against) _generative)ColumnCollection)Insert) ClauseElement)alias)public_factory)rinsertc@sVeZdZdZdZejddZedddidZ e e d d d Z e e dd d Z dS)ra?SQLite-specific implementation of INSERT. Adds methods for SQLite-specific syntaxes such as ON CONFLICT. The :class:`_sqlite.Insert` object is created using the :func:`sqlalchemy.dialects.sqlite.insert` function. .. versionadded:: 1.4 .. seealso:: :ref:`sqlite_on_conflict_insert` sqlitecCst|jddjS)aProvide the ``excluded`` namespace for an ON CONFLICT statement SQLite'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:`_sqlite.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. excluded)name)r tablecolumns)selfr_C:\Users\vtejo\AppData\Local\Temp\pip-unpacked-wheel-nyjtotrf\sqlalchemy\dialects\sqlite\dml.pyr(szInsert.excluded_post_values_clausezCThis Insert construct already has an ON CONFLICT clause established)ZmsgsNcCst|||||_dS)a Specifies a DO UPDATE SET action for ON CONFLICT clause. :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 or unique constraint. :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:`_sqlite.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). N)OnConflictDoUpdaterrindex_elements index_whereset_whererrron_conflict_do_updateFs 1zInsert.on_conflict_do_updatecCst|||_dS)a Specifies a DO NOTHING action for ON CONFLICT clause. :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 or unique constraint. :param index_where: Additional WHERE criterion that can be used to infer a conditional target index. N)OnConflictDoNothingrrrrrrron_conflict_do_nothing{szInsert.on_conflict_do_nothing)NNNN)NN) __name__ __module__ __qualname____doc__stringify_dialectrZmemoized_propertyrrZ_on_conflict_exclusiverrrrrrrrs( 3rz.dialects.sqlite.insertz.dialects.sqlite.Insertc@seZdZdZdddZdS)OnConflictClauser NcCs2|dk rd|_||_||_nd|_|_|_dS)N)Zconstraint_targetZinferred_target_elementsZinferred_target_whereclauserrrr__init__szOnConflictClause.__init__)NN)r r!r"r$r&rrrrr%sr%c@seZdZdZdS)rrN)r r!r"__visit_name__rrrrrsrcs"eZdZdZdfdd ZZS)rrNcsftt|j||dt|tr,|sHtdnt|tr@t|}ntddd|D|_||_ dS)N)rrz*set parameter dictionary must not be emptyzqset parameter must be a non-empty dictionary or a ColumnCollection such as the `.c.` collection of a Table objectcSs"g|]\}}ttj||fqSr)rexpectrZ DMLColumnRole).0keyvaluerrr sz/OnConflictDoUpdate.__init__..) superrr& isinstancedict ValueErrorritemsZupdate_values_to_setZupdate_whereclauser __class__rrr&s      zOnConflictDoUpdate.__init__)NNNN)r r!r"r'r& __classcell__rrr2rrs rN)rZsqlrrZsql.baserrrZsql.dmlrZStandardInsertZ sql.elementsr Zsql.expressionr Zutil.langhelpersr __all__r r%rrrrrrs&          {