From d9770099553702151e26e3b5d9f24b94c414887e Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Sat, 13 Feb 2021 23:21:04 -0500 Subject: Allow update.returing() to work with from_statement() The ORM used in :term:`2.0 style` can now return ORM objects from the rows returned by an UPDATE..RETURNING or INSERT..RETURNING statement, by supplying the construct to :meth:`_sql.Select.from_statement` in an ORM context. Change-Id: I59c9754ff1cb3184580dd5194ecd2971d4e7f8e8 References: #5940 --- lib/sqlalchemy/sql/dml.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'lib/sqlalchemy/sql') diff --git a/lib/sqlalchemy/sql/dml.py b/lib/sqlalchemy/sql/dml.py index 3f492a490..ea10bfc27 100644 --- a/lib/sqlalchemy/sql/dml.py +++ b/lib/sqlalchemy/sql/dml.py @@ -47,6 +47,10 @@ class DMLState(CompileState): def __init__(self, statement, compiler, **kw): raise NotImplementedError() + @property + def dml_table(self): + return self.statement.table + def _make_extra_froms(self, statement): froms = [] @@ -407,7 +411,9 @@ class UpdateBase( raise exc.InvalidRequestError( "return_defaults() is already configured on this statement" ) - self._returning += cols + self._returning += tuple( + coercions.expect(roles.ColumnsClauseRole, c) for c in cols + ) def _exported_columns_iterator(self): """Return the RETURNING columns as a sequence for this statement. -- cgit v1.2.1