diff options
| author | Oliver Rice <github@oliverrice.com> | 2021-02-13 14:21:55 -0500 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2021-02-15 13:25:43 -0500 |
| commit | 120347aad15fac4a54e16aa60e0e5b3b6b3995c4 (patch) | |
| tree | 079b796a3a6ec3d0851bd4215a1edaac118b7357 | |
| parent | 996a8ca9bbf0cb9c9caea7926bc160d0c1fd7648 (diff) | |
| download | sqlalchemy-120347aad15fac4a54e16aa60e0e5b3b6b3995c4.tar.gz | |
Support legacy select(<iterable>) in addition to select(<list>) in v1.4
Fixed regression where use of an arbitrary iterable with the
:func:`_sql.select` function was not working, outside of plain lists. The
forwards/backwards compatibility logic here now checks for a wider range of
incoming "iterable" types including that a ``.c`` collection from a
selectable can be passed directly. Pull request compliments of Oliver Rice.
Fixes: #5935
Closes: #5936
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/5936
Pull-request-sha: 575ab3e7df30fc8da03752d102c8eeb6cb3a3e3d
Change-Id: Icd972f1078d9ea96c47a64133079f00d9b0a66f3
| -rw-r--r-- | doc/build/changelog/unreleased_14/5935.rst | 9 | ||||
| -rw-r--r-- | lib/sqlalchemy/sql/selectable.py | 6 | ||||
| -rw-r--r-- | test/sql/test_deprecations.py | 10 |
3 files changed, 24 insertions, 1 deletions
diff --git a/doc/build/changelog/unreleased_14/5935.rst b/doc/build/changelog/unreleased_14/5935.rst new file mode 100644 index 000000000..f7d06301a --- /dev/null +++ b/doc/build/changelog/unreleased_14/5935.rst @@ -0,0 +1,9 @@ +.. change:: + :tags: bug, sql + :tickets: 5935 + + Fixed regression where use of an arbitrary iterable with the + :func:`_sql.select` function was not working, outside of plain lists. The + forwards/backwards compatibility logic here now checks for a wider range of + incoming "iterable" types including that a ``.c`` collection from a + selectable can be passed directly. Pull request compliments of Oliver Rice. diff --git a/lib/sqlalchemy/sql/selectable.py b/lib/sqlalchemy/sql/selectable.py index 23fdf7e12..ee2c4dafc 100644 --- a/lib/sqlalchemy/sql/selectable.py +++ b/lib/sqlalchemy/sql/selectable.py @@ -4861,7 +4861,11 @@ class Select( constructs as given, as well as ORM-mapped classes. """ - if (args and isinstance(args[0], list)) or kw: + if ( + args + and hasattr(args[0], "__iter__") + and not isinstance(args[0], util.string_types + (ClauseElement,)) + ) or kw: return cls.create_legacy_select(*args, **kw) else: return cls._create_future_select(*args) diff --git a/test/sql/test_deprecations.py b/test/sql/test_deprecations.py index 35633a1a3..1e5b1b995 100644 --- a/test/sql/test_deprecations.py +++ b/test/sql/test_deprecations.py @@ -437,6 +437,16 @@ class SelectableTest(fixtures.TestBase, AssertsCompiledSQL): stmt = select([column("q")]) self.assert_compile(stmt, "SELECT q") + def test_select_column_collection_argument(self): + t1 = table("t1", column("q")) + + with testing.expect_deprecated_20( + r"The legacy calling style of select\(\) is deprecated " + "and will be removed in SQLAlchemy 2.0" + ): + stmt = select(t1.c) + self.assert_compile(stmt, "SELECT t1.q FROM t1") + def test_select_kw_argument(self): with testing.expect_deprecated_20( |
