L i^/ddlmZddlmZddlmZddlmZddlmZddlmZddlm Z d d l m Z d d l m Z d d l m Z d d l mZd dl mZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlm Z ddlm!Z!ddlm"Z"ddlm#Z#ddl$m%Z%ddl&m'Z'd Z(d+d"Z)Gd#d!eZGd$d%e Z*Gd&d'e*Z+Gd(d)e*Z,y*),) annotations)Any)List)Optional)Tuple)Union)ext)_OnConflictConstraintT)_OnConflictIndexElementsT)_OnConflictIndexWhereT)_OnConflictSetT)_OnConflictWhereT)util) coercions)roles)schema)_DMLTableArgument)_exclusive_against) _generative)ColumnCollection)ReadOnlyColumnCollectionInsert) ClauseElement) ColumnElement)KeyedColumnElement) TextClause)alias)Self)rinsertrct|S)asConstruct a PostgreSQL-specific variant :class:`_postgresql.Insert` construct. .. container:: inherited_member The :func:`sqlalchemy.dialects.postgresql.insert` function creates a :class:`sqlalchemy.dialects.postgresql.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:`_postgresql.Insert` construct includes additional methods :meth:`_postgresql.Insert.on_conflict_do_update`, :meth:`_postgresql.Insert.on_conflict_do_nothing`. r)tables h/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/sqlalchemy/dialects/postgresql/dml.pyr#r#*s" %=ceZdZdZdZdZej d dZe dddiZ e e d d d Z e e d dd Z y)rzPostgreSQL-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. postgresqlFcDt|jdjS)akProvide 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` excluded)name)r!r%columns)selfs r&r+zInsert.excludedKs6TZZj1999r'_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. 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. 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). .. seealso:: :ref:`postgresql_insert_on_conflict` )OnConflictDoUpdater/)r. constraintindex_elements index_whereset_wheres r&on_conflict_do_updatezInsert.on_conflict_do_updateps$x$6  T5$   r'c*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:`_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. .. seealso:: :ref:`postgresql_insert_on_conflict` )OnConflictDoNothingr/)r.r3r4r5s r&on_conflict_do_nothingzInsert.on_conflict_do_nothings @$7  $   r')returnz6ReadOnlyColumnCollection[str, KeyedColumnElement[Any]]NNNNN) r3r r4r r5rr6rr7rr<r"NNN)r3r r4r r5rr<r")__name__ __module__ __qualname____doc__stringify_dialect inherit_cachermemoized_propertyr+r_on_conflict_exclusiverr8r;r'r&rr>s%M : ?::80 !$0 .248.2 $#' =*=2=, =  = ! = ==~.248.2 !*!2!, !  !!r'cJeZdZUdZded<ded<ded< d d d Zy) OnConflictClauser)z Optional[str]constraint_targetz.Optional[List[Union[str, schema.Column[Any]]]]inferred_target_elementsz/Optional[Union[ColumnElement[Any], TextClause]]inferred_target_whereclauseNc|Jt|ts:t|tjtj frt |dxs|}|| tdt|tr||_d|_ d|_ nt|tjr+|j}|jdjd}n]t|tj r|j}|j }n*|j}|jdjd}|d|_|Dcgc]&}t#j$t&j(|(c}|_ |Tt#j$t|tj rt&j*nt&j,||_ yd|_ y|dx|_x|_ |_ yycc}w)Nr,z8'constraint' and 'index_elements' are mutually exclusiver)r7) isinstancestrr Constraintr ExcludeConstraintgetattr ValueErrorrJrKrLIndex expressionsdialect_optionsgetr-r7rexpectrDDLConstraintColumnRoleStatementOptionRoleWhereHavingRole)r.r3r4r5columns r&__init__zOnConflictClause.__init__s  !j#.:""C$9$9:4%Z8FJ  !) N*c*)3&04-370J 5!+!7!7(88FJJ J(=(=>!+!3!3(.. !+!3!3(88FJJ   %%)D "--  !>!>G-D )*  &j#2G2GH11"22   ,  ,  D " T%B0 %-s1+Gr>)r3r r4r r5r)r?r@rArC__annotations__r]rGr'r&rIrIsJ$$$LL" .248.2 <*<2<, <r'rIceZdZdZy)r:r;N)r?r@rA__visit_name__rGr'r&r:r:s-Nr'r:cXeZdZUdZded<ded< d dfd ZxZS) r2r8z0List[Tuple[Union[schema.Column[Any], str], Any]]update_values_to_setzOptional[ColumnElement[Any]]update_whereclausect|||||j|j t dt |t r |s2t dt |tr t |}n t d|jDcgc]+\}}tjtj||f-c}}|_ |*tjtj||_yd|_ycc}}w)N)r3r4r5zVEither constraint or index_elements, but not both, must be specified unless DO NOTHINGz*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)superr]rKrJrSrNdictritemsrrXr DMLColumnRolerbr[rc) r.r3r4r5r6r7keyvalue __class__s r&r]zOnConflictDoUpdate.__init__)s !)#    ) ) 1&&.D  dD ! !MNN . /:D$ #jjl% U  e113 7 ?% !     U22E :   % s0C;r=) r3r r4r r5rr6rr7r)r?r@rAr`r^r] __classcell__)rks@r&r2r2#s_,NJJ44.248.2 $#' * ** 2* , *  * ! * * r'r2N)r%rr<r)- __future__rtypingrrrrrr _typingr r rrrrsqlrrr sql._typingrsql.baserrrrsql.dmlrStandardInsert sql.elementsrrrr sql.expressionr! util.typingr"__all__r#rIr:r2rGr'r&rzs#,/,%',*#(0/)).&# (V^VrE}EP.*.0 )0 r'