From d08a6d291d08e416853503f2f8cc19a5301a4b6b Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Fri, 12 Jul 2013 12:14:50 -0400 Subject: [PATCH] - use inline=True for the insert..select here so it works on oracle --- lib/sqlalchemy/sql/expression.py | 11 +++++++++++ lib/sqlalchemy/testing/suite/test_insert.py | 4 ++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/lib/sqlalchemy/sql/expression.py b/lib/sqlalchemy/sql/expression.py index 9e5c4cfcb6..08ef20a897 100644 --- a/lib/sqlalchemy/sql/expression.py +++ b/lib/sqlalchemy/sql/expression.py @@ -6454,6 +6454,17 @@ class Insert(ValuesBase): would normally raise an exception if these column lists don't correspond. + .. note:: + + Depending on backend, it may be necessary for the :class:`.Insert` + statement to be constructed using the ``inline=True`` flag; this + flag will prevent the implicit usage of ``RETURNING`` when the + ``INSERT`` statement is rendered, which isn't supported on a backend + such as Oracle in conjunction with an ``INSERT..SELECT`` combination:: + + sel = select([table1.c.a, table1.c.b]).where(table1.c.c > 5) + ins = table2.insert(inline=True).from_select(['a', 'b'], sel) + .. versionadded:: 0.8.3 """ diff --git a/lib/sqlalchemy/testing/suite/test_insert.py b/lib/sqlalchemy/testing/suite/test_insert.py index ef05291b5b..e671eeb7a2 100644 --- a/lib/sqlalchemy/testing/suite/test_insert.py +++ b/lib/sqlalchemy/testing/suite/test_insert.py @@ -135,9 +135,9 @@ class InsertBehaviorTest(fixtures.TablesTest): config.db.execute( - table.insert(). + table.insert(inline=True). from_select( - ("data",), select([table.c.data]).where( + ("id", "data",), select([table.c.id + 5, table.c.data]).where( table.c.data.in_(["data2", "data3"])) ), ) -- 2.47.3