L i#ddlmZddlmZddlmZddlmZddlmZddlmZddlm Z dd lm Z dd lm Z dd lm Z d d l mZd dlmZd dlmZd dlmZd dlmZd dlmZd dlmZd dlmZd dlmZd dlmZd dlmZd dlmZd dlm Z d dlm!Z!d dl"m#Z#d dl$m%Z%dZ&d(dZ'Gd deZGd!d"eZ(Gd#d$e(Z)Gd%d&e(Z*y'))) annotations)Any)List)Optional)Tuple)Union)_OnConflictIndexElementsT)_OnConflictIndexWhereT)_OnConflictSetT)_OnConflictWhereT)util) coercions)roles)schema)_DMLTableArgument)_exclusive_against) _generative)ColumnCollection)ReadOnlyColumnCollectionInsert) ClauseElement) ColumnElement)KeyedColumnElement) TextClause)alias)Self)rinsertrct|S)aWConstruct a sqlite-specific variant :class:`_sqlite.Insert` construct. .. container:: inherited_member The :func:`sqlalchemy.dialects.sqlite.insert` function creates a :class:`sqlalchemy.dialects.sqlite.Insert`. This class is based on the dialect-agnostic :class:`_sql.Insert` construct which may be constructed using the :func:`_sql.insert` function in SQLAlchemy Core. The :class:`_sqlite.Insert` construct includes additional methods :meth:`_sqlite.Insert.on_conflict_do_update`, :meth:`_sqlite.Insert.on_conflict_do_nothing`. r)tables d/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/sqlalchemy/dialects/sqlite/dml.pyr r 's" %=ceZdZdZdZdZej d dZe dddiZ e e d d d Z e e d dd Z y)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` sqliteFcDt|jdjS)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)rr"columns)selfs r#r(zInsert.excludedNs,TZZj1999r$_post_values_clausezCThis Insert construct already has an ON CONFLICT clause established)msgsNc,t|||||_|S)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. An expression object representing 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). )OnConflictDoUpdater,)r+index_elements index_whereset_wheres r#on_conflict_do_updatezInsert.on_conflict_do_updatens"`$6 Ku$   r$c(t|||_|S)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. )OnConflictDoNothingr,)r+r0r1s r#on_conflict_do_nothingzInsert.on_conflict_do_nothings*$7 K$   r$)returnz6ReadOnlyColumnCollection[str, KeyedColumnElement[Any]]NNNN) r0r r1r r2r r3r r8rNN)r0r r1r r8r)__name__ __module__ __qualname____doc__stringify_dialect inherit_cachermemoized_propertyr(r_on_conflict_exclusiverr4r7r$r#rr;s !M : ?::.0 !$0 59.2 $#' 111,1 1 ! 1  11f59.21,  r$c:eZdZUdZded<ded< d d dZy) OnConflictClauser&z.Optional[List[Union[str, schema.Column[Any]]]]inferred_target_elementsz/Optional[Union[ColumnElement[Any], TextClause]]inferred_target_whereclauseNc|k|Dcgc]&}tjtj|(c}|_|*tjtj ||_yd|_ydx|_|_ycc}w)N)rexpectrDDLConstraintColumnRolerFWhereHavingRolerG)r+r0r1columns r#__init__zOnConflictClause.__init__s  %--  !>!>G-D )*   ))  ,   , D )0-s+A=r:)r0r r1r )r;r<r=r?__annotations__rMrCr$r#rErEs7 LL" 59.21,r$rEceZdZdZy)r6r7N)r;r<r=__visit_name__rCr$r#r6r6s-Nr$r6cReZdZUdZded<ded< d dfd ZxZS) r/r4z0List[Tuple[Union[schema.Column[Any], str], Any]]update_values_to_setzOptional[ColumnElement[Any]]update_whereclausect|||t|tr |s2t dt|t r t|}n t d|j Dcgc]+\}}tjtj||f-c}}|_ |*tjtj||_ yd|_ ycc}}w)N)r0r1z*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 object)superrM isinstancedict ValueErrorritemsrrIr DMLColumnRolerRrKrS)r+r0r1r2r3keyvalue __class__s r#rMzOnConflictDoUpdate.__init__s )#  dD ! !MNN . /:D$ #jjl% U  e113 7 ?% !     U22E :   % s*0Cr9)r0r r1r r2r r3r )r;r<r=rPrNrM __classcell__)r]s@r#r/r/sR,NJJ4459.2 $#'  1 ,   !   r$r/N)r"rr8r)+ __future__rtypingrrrrr_typingr r r r rsqlrrr sql._typingrsql.baserrrrsql.dmlrStandardInsert sql.elementsrrrrsql.expressionr util.typingr__all__r rEr6r/rCr$r#rls#/,%',*#(0/)).&# (@^@F}@.*.% )% r$