# sql/_dml_constructors.py # Copyright (C) 2005-2023 the SQLAlchemy authors and contributors # # # This module is part of SQLAlchemy and is released under # the MIT License: https://www.opensource.org/licenses/mit-license.php from __future__ import annotations from typing import TYPE_CHECKING from .dml import Delete from .dml import Insert from .dml import Update if TYPE_CHECKING: from ._typing import _DMLTableArgument def insert(table: _DMLTableArgument) -> Insert: """Construct an :class:`_expression.Insert` object. E.g.:: from sqlalchemy import insert stmt = ( insert(user_table). values(name='username', fullname='Full Username') ) Similar functionality is available via the :meth:`_expression.TableClause.insert` method on :class:`_schema.Table`. .. seealso:: :ref:`tutorial_core_insert` - in the :ref:`unified_tutorial` :param table: :class:`_expression.TableClause` which is the subject of the insert. :param values: collection of values to be inserted; see :meth:`_expression.Insert.values` for a description of allowed formats here. Can be omitted entirely; a :class:`_expression.Insert` construct will also dynamically render the VALUES clause at execution time based on the parameters passed to :meth:`_engine.Connection.execute`. :param inline: if True, no attempt will be made to retrieve the SQL-generated default values to be provided within the statement; in particular, this allows SQL expressions to be rendered 'inline' within the statement without the need to pre-execute them beforehand; for backends that support "returning", this turns off the "implicit returning" feature for the statement. If both :paramref:`_expression.insert.values` and compile-time bind parameters are present, the compile-time bind parameters override the information specified within :paramref:`_expression.insert.values` on a per-key basis. The keys within :paramref:`_expression.Insert.values` can be either :class:`~sqlalchemy.schema.Column` objects or their string identifiers. Each key may reference one of: * a literal data value (i.e. string, number, etc.); * a Column object; * a SELECT statement. If a ``SELECT`` statement is specified which references this ``INSERT`` statement's table, the statement will be correlated against the ``INSERT`` statement. .. seealso:: :ref:`tutorial_core_insert` - in the :ref:`unified_tutorial` """ return Insert(table) def update(table: _DMLTableArgument) -> Update: r"""Construct an :class:`_expression.Update` object. E.g.:: from sqlalchemy import update stmt = ( update(user_table). where(user_table.c.id == 5). values(name='user #5') ) Similar functionality is available via the :meth:`_expression.TableClause.update` method on :class:`_schema.Table`. :param table: A :class:`_schema.Table` object representing the database table to be updated. .. seealso:: :ref:`tutorial_core_update_delete` - in the :ref:`unified_tutorial` """ return Update(table) def delete(table: _DMLTableArgument) -> Delete: r"""Construct :class:`_expression.Delete` object. E.g.:: from sqlalchemy import delete stmt = ( delete(user_table). where(user_table.c.id == 5) ) Similar functionality is available via the :meth:`_expression.TableClause.delete` method on :class:`_schema.Table`. :param table: The table to delete rows from. .. seealso:: :ref:`tutorial_core_update_delete` - in the :ref:`unified_tutorial` """ return Delete(table)