code: def __init__(
      self, inserted_alias: NamedFromClause, update: _UpdateArg
  ) -> None:
      self.inserted_alias = inserted_alias
  
      # auto-detect that parameters should be ordered.   This is copied from
      # Update._proces_colparams(), however we don't look for a special flag
      # in this case since we are not disambiguating from other use cases as
      # we are in Update.values().
      if isinstance(update, list) and (
          update and isinstance(update[0], tuple)
      ):
          self._parameter_ordering = [key for key, value in update]
          update = dict(update)
  
      if isinstance(update, dict):
          if not update:
              raise ValueError(
                  "update parameter dictionary must not be empty"
              )
      elif isinstance(update, ColumnCollection):
          update = dict(update)
      else:
          raise ValueError(
              "update parameter must be a non-empty dictionary "
              "or a ColumnCollection such as the `.c.` collection "
              "of a Table object"
          )
      self.update = update
  
imports: from __future__ import annotations
  from typing import Any
  from typing import List
  from typing import Mapping
  from typing import Optional
  from typing import Tuple
  from typing import Union
  from ...None import exc
  from ...None import util
  from ...sql._typing import _DMLTableArgument
  from ...sql.base import _exclusive_against
  from ...sql.base import _generative
  from ...sql.base import ColumnCollection
  from ...sql.base import ReadOnlyColumnCollection
  from ...sql.dml import Insert
  from ...sql.elements import ClauseElement
  from ...sql.elements import KeyedColumnElement
  from ...sql.expression import alias
  from ...sql.selectable import NamedFromClause
  from ...util.typing import Self
label_desc: Use image node_id 1 to create a new OnDuplicateClause object from inherited base classes: ClauseElement with example: obj = OnDuplicateClause(inserted_alias, update)