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
U
¸ý°dã@sœddlmZddlmZddlmZddlmZddlmZddlmZ    ddl
m Z ddl m Z dd    lmZd
Zd d „ZGd d„de    ƒZGdd„de ƒZdS)é)Úexc)Úutil)Ú_exclusive_against)Ú _generative)ÚColumnCollection©ÚInsert)Ú ClauseElement)Úalias)ÚSelf)rÚinsertcCst|ƒS)a(Construct a MySQL/MariaDB-specific variant :class:`_mysql.Insert`
    construct.
 
    .. container:: inherited_member
 
        The :func:`sqlalchemy.dialects.mysql.insert` function creates
        a :class:`sqlalchemy.dialects.mysql.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:`_mysql.Insert` construct includes additional methods
    :meth:`_mysql.Insert.on_duplicate_key_update`.
 
    r)Útable©rúTd:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\sqlalchemy/dialects/mysql/dml.pyr sr c@sTeZdZdZdZdZedd„ƒZej    dd„ƒZ
e e ddd    id
e d œd d „ƒƒZdS)ra MySQL-specific implementation of INSERT.
 
    Adds methods for MySQL-specific syntaxes such as ON DUPLICATE KEY UPDATE.
 
    The :class:`~.mysql.Insert` object is created using the
    :func:`sqlalchemy.dialects.mysql.insert` function.
 
    .. versionadded:: 1.2
 
    ÚmysqlFcCs|jjS)aŸProvide the "inserted" namespace for an ON DUPLICATE KEY UPDATE
        statement
 
        MySQL's ON DUPLICATE KEY UPDATE clause allows reference to the row
        that would be inserted, via a special function called ``VALUES()``.
        This attribute provides all columns in this row to be referenceable
        such that they will render within a ``VALUES()`` function inside the
        ON DUPLICATE KEY UPDATE clause.    The attribute is named ``.inserted``
        so as not to conflict with the existing
        :meth:`_expression.Insert.values` method.
 
        .. tip::  The :attr:`_mysql.Insert.inserted` 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.inserted.some_column``), but special names and
            dictionary method names should be accessed using indexed access,
            such as ``stmt.inserted["column name"]`` or
            ``stmt.inserted["values"]``.  See the docstring for
            :class:`_expression.ColumnCollection` for further examples.
 
        .. seealso::
 
            :ref:`mysql_insert_on_duplicate_key_update` - example of how
            to use :attr:`_expression.Insert.inserted`
 
        )Úinserted_aliasÚcolumns©ÚselfrrrÚinserted9szInsert.insertedcCst|jddS)Nr)Úname)r
r rrrrrYszInsert.inserted_aliasÚ_post_values_clausezDThis Insert construct already has an ON DUPLICATE KEY clause present)Zmsgs)ÚreturncOsV|r|rt d¡‚|r6t|ƒdkr,t d¡‚|d}n|}t|ddƒ}t||ƒ|_|S)aO
        Specifies the ON DUPLICATE KEY UPDATE clause.
 
        :param \**kw:  Column keys linked to UPDATE values.  The
         values may be any SQL expression or supported literal Python
         values.
 
        .. 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 DUPLICATE KEY UPDATE
           style of UPDATE, unless values are manually specified here.
 
        :param \*args: As an alternative to passing key/value parameters,
         a dictionary or list of 2-tuples can be passed as a single positional
         argument.
 
         Passing a single dictionary is equivalent to the keyword argument
         form::
 
            insert().on_duplicate_key_update({"name": "some name"})
 
         Passing a list of 2-tuples indicates that the parameter assignments
         in the UPDATE clause should be ordered as sent, in a manner similar
         to that described for the :class:`_expression.Update`
         construct overall
         in :ref:`tutorial_parameter_ordered_updates`::
 
            insert().on_duplicate_key_update(
                [("name", "some name"), ("value", "some value")])
 
         .. versionchanged:: 1.3 parameters can be specified as a dictionary
            or list of 2-tuples; the latter form provides for parameter
            ordering.
 
 
        .. versionadded:: 1.2
 
        .. seealso::
 
            :ref:`mysql_insert_on_duplicate_key_update`
 
        z9Can't pass kwargs and positional arguments simultaneouslyézDOnly a single dictionary or list of tuples is accepted positionally.érN)rÚ ArgumentErrorÚlenÚgetattrÚOnDuplicateClauser)rÚargsÚkwÚvaluesrrrrÚon_duplicate_key_update]s4ÿ ÿ
  zInsert.on_duplicate_key_updateN)Ú__name__Ú
__module__Ú __qualname__Ú__doc__Ústringify_dialectZ inherit_cacheÚpropertyrrZmemoized_propertyrrrr r"rrrrr*s 
 
ÿþrc@s eZdZdZdZdZdd„ZdS)rr"NrcCsx||_t|tƒr:|r:t|dtƒr:dd„|Dƒ|_t|ƒ}t|tƒrR|sntdƒ‚nt|tƒrft|ƒ}ntdƒ‚||_dS)NrcSsg|] \}}|‘qSrr)Ú.0ÚkeyÚvaluerrrÚ
<listcomp>¶sz.OnDuplicateClause.__init__.<locals>.<listcomp>z-update parameter dictionary must not be emptyztupdate parameter must be a non-empty dictionary or a ColumnCollection such as the `.c.` collection of a Table object)    rÚ
isinstanceÚlistÚtupleÚ_parameter_orderingÚdictÚ
ValueErrorrÚupdate)rrr3rrrÚ__init__¬s&
ÿ ÿ
ÿ
 
ÿzOnDuplicateClause.__init__)r#r$r%Z__visit_name__r0r'r4rrrrr¥srN)ÚrrZsql.baserrrZsql.dmlrZStandardInsertZ sql.elementsr    Zsql.expressionr
Z util.typingr Ú__all__r rrrrrÚ<module>    s         {