zmc
2023-12-22 9fdbf60165db0400c2e8e6be2dc6e88138ac719a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
U
¸ý°d(ã@sàddlmZddlmZddlmZddlmZddlmZddlmZddlm    Z    dd    lm
Z
dd
l m Z dd lmZdd lmZdd lmZdZdd„ZGdd„de ƒZ Gdd„deƒZGdd„deƒZGdd„deƒZdS)é)Úexté)Úutil)Ú    coercions)Úroles)Úschema)Ú_exclusive_against)Ú _generative)ÚColumnCollection©ÚInsert)Ú ClauseElement)Úalias)ÚSelf)r ÚinsertcCst|ƒ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 )Útable©rúYd:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\sqlalchemy/dialects/postgresql/dml.pyrsrc@sfeZdZdZdZdZejdd„ƒZe    dddidZ
e e
de d
œd d „ƒƒZ e e
de d
œd d„ƒƒZd    S)r zð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.
 
    Ú
postgresqlFcCst|jddjS)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)rrÚcolumns)Úselfrrrr;szInsert.excludedÚ_post_values_clausezCThis Insert construct already has an ON CONFLICT clause established)ZmsgsN)ÚreturncCst|||||ƒ|_|S)aS
        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).
 
 
        .. seealso::
 
            :ref:`postgresql_insert_on_conflict`
 
        )ÚOnConflictDoUpdater©rÚ
constraintÚindex_elementsÚ index_whereÚset_ÚwhererrrÚon_conflict_do_update^s=ÿzInsert.on_conflict_do_updatecCst|||ƒ|_|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©rrrrrrrÚon_conflict_do_nothing s  ÿzInsert.on_conflict_do_nothing)NNNNN)NNN)Ú__name__Ú
__module__Ú __qualname__Ú__doc__Ústringify_dialectZ inherit_cacherZmemoized_propertyrrZ_on_conflict_exclusiver    rr"r%rrrrr .s:    
ÿþúù@üûr c@seZdZdZddd„ZdS)ÚOnConflictClauserNcCsö|dk    r2t|tƒs2t|tjtjfƒr2t|dƒp0|}|dk    r¼|dk    rJtdƒ‚t|tƒrh||_d|_    d|_
nTt|tj ƒrŒ|j }|j d d¡}n0t|tjƒr¦|j}|j}n|j}|j d d¡}|dk    rØd|_||_    ||_
n|dkròd|_|_    |_
dS)Nrz8'constraint' and 'index_elements' are mutually exclusiverr!)Ú
isinstanceÚstrrZ
ConstraintrZExcludeConstraintÚgetattrÚ
ValueErrorÚconstraint_targetÚinferred_target_elementsZinferred_target_whereclauseZIndexZ expressionsZdialect_optionsÚgetrr!r$rrrÚ__init__ÉsJ 
þÿ
 
ÿ 
ÿþþzOnConflictClause.__init__)NNN)r&r'r(r*r3rrrrr+Æsr+c@seZdZdZdS)r#r%N)r&r'r(Ú__visit_name__rrrrr#ôsr#cs"eZdZdZd‡fdd„    Z‡ZS)rr"Ncs€tƒj|||d|jdkr.|jdkr.tdƒ‚t|tƒrF|sbtdƒ‚nt|tƒrZt|ƒ}ntdƒ‚dd„| ¡Dƒ|_    ||_
dS)N)rrrzVEither 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 objectcSs"g|]\}}t tj|¡|f‘qSr)rÚexpectrZ DMLColumnRole)Ú.0ÚkeyÚvaluerrrÚ
<listcomp>sÿz/OnConflictDoUpdate.__init__.<locals>.<listcomp>) Úsuperr3r1r0r/r,Údictr
ÚitemsZupdate_values_to_setZupdate_whereclauser©Ú    __class__rrr3ûs0ýÿþÿ
 
 
 
ÿþzOnConflictDoUpdate.__init__)NNNNN)r&r'r(r4r3Ú __classcell__rrr=rrøsúrN)ÚrrZsqlrrrZsql.baserr    r
Zsql.dmlr ZStandardInsertZ sql.elementsr Zsql.expressionrZ util.typingrÚ__all__rr+r#rrrrrÚ<module>    s$            .