Skip to content

Commit 01ec014

Browse files
author
Jesse Whitehouse
committed
(4/x) SQLAlchemy 1.4 introduced different semantics for the select()
method https: //docs.sqlalchemy.org/en/20/changelog/migration_14.html#orm-query-is-internally-unified-with-select-update-delete-2-0-style-execution-available Signed-off-by: Jesse Whitehouse <[email protected]>
1 parent 52f3c5e commit 01ec014

File tree

2 files changed

+28
-6
lines changed

2 files changed

+28
-6
lines changed

examples/sqlalchemy.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,9 +102,14 @@ class SampleObject(base):
102102

103103
session.commit()
104104

105-
stmt = select(SampleObject).where(SampleObject.name.in_(["Bim Adewunmi", "Miki Meek"]))
105+
# SQLAlchemy 1.3 has slightly different methods
106+
if sqlalchemy.__version__.startswith("1.3"):
107+
stmt = select([SampleObject]).where(SampleObject.name.in_(["Bim Adewunmi", "Miki Meek"]))
108+
output = [i for i in session.execute(stmt)]
109+
else:
110+
stmt = select(SampleObject).where(SampleObject.name.in_(["Bim Adewunmi", "Miki Meek"]))
111+
output = [i for i in session.scalars(stmt)]
106112

107-
output = [i for i in session.scalars(stmt)]
108113
assert len(output) == 2
109114

110115
base.metadata.drop_all()

tests/e2e/sqlalchemy/test_basic.py

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,23 @@
1313

1414
USER_AGENT_TOKEN = "PySQL e2e Tests"
1515

16+
def sqlalchemy_1_3():
17+
import sqlalchemy
18+
return sqlalchemy.__version__.startswith("1.3")
19+
20+
def version_agnostic_select(object_to_select, *args, **kwargs):
21+
"""
22+
SQLAlchemy==1.3.x requires arguments to select() to be a Python list
23+
24+
https://docs.sqlalchemy.org/en/20/changelog/migration_14.html#orm-query-is-internally-unified-with-select-update-delete-2-0-style-execution-available
25+
"""
26+
27+
if sqlalchemy_1_3():
28+
return select([object_to_select], *args, **kwargs)
29+
else:
30+
return select(object_to_select, *args, **kwargs)
31+
32+
1633

1734
@pytest.fixture
1835
def db_engine():
@@ -154,7 +171,7 @@ def test_bulk_insert_with_core(db_engine, metadata_obj, session):
154171
metadata_obj.create_all()
155172
db_engine.execute(insert(SampleTable).values(rows))
156173

157-
rows = db_engine.execute(select(SampleTable)).fetchall()
174+
rows = db_engine.execute(version_agnostic_select(SampleTable)).fetchall()
158175

159176
assert len(rows) == num_to_insert
160177

@@ -180,7 +197,7 @@ def test_create_insert_drop_table_core(base, db_engine, metadata_obj: MetaData):
180197
with db_engine.connect() as conn:
181198
conn.execute(insert_stmt)
182199

183-
select_stmt = select(SampleTable)
200+
select_stmt = version_agnostic_select(SampleTable)
184201
resp = db_engine.execute(select_stmt)
185202

186203
result = resp.fetchall()
@@ -216,7 +233,7 @@ class SampleObject(base):
216233
session.add(sample_object_2)
217234
session.commit()
218235

219-
stmt = select(SampleObject).where(
236+
stmt = version_agnostic_select(SampleObject).where(
220237
SampleObject.name.in_(["Bim Adewunmi", "Miki Meek"])
221238
)
222239

@@ -258,7 +275,7 @@ def test_dialect_type_mappings(base, db_engine, metadata_obj: MetaData):
258275
with db_engine.connect() as conn:
259276
conn.execute(insert_stmt)
260277

261-
select_stmt = select(SampleTable)
278+
select_stmt = version_agnostic_select(SampleTable)
262279
resp = db_engine.execute(select_stmt)
263280

264281
result = resp.fetchall()

0 commit comments

Comments
 (0)