From: Mike Bayer Date: Fri, 12 Jul 2013 16:14:50 +0000 (-0400) Subject: - use inline=True for the insert..select here so it works on oracle X-Git-Tag: rel_0_8_3~96 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3c363e125c461d08e9fe4a73ac8c5a3aa741eac6;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git - use inline=True for the insert..select here so it works on oracle --- diff --git a/lib/sqlalchemy/sql/expression.py b/lib/sqlalchemy/sql/expression.py index 7cb1326e2f..45341bba75 100644 --- a/lib/sqlalchemy/sql/expression.py +++ b/lib/sqlalchemy/sql/expression.py @@ -6364,6 +6364,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"])) ), )