Skip to content
This repository was archived by the owner on Aug 19, 2025. It is now read-only.

Commit 1f7ca7b

Browse files
authored
support render_postcompile (#378)
1 parent b4cd10c commit 1f7ca7b

5 files changed

Lines changed: 29 additions & 4 deletions

File tree

databases/backends/aiopg.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,9 @@ def transaction(self) -> TransactionBackend:
199199
def _compile(
200200
self, query: ClauseElement
201201
) -> typing.Tuple[str, dict, CompilationContext]:
202-
compiled = query.compile(dialect=self._dialect)
202+
compiled = query.compile(
203+
dialect=self._dialect, compile_kwargs={"render_postcompile": True}
204+
)
203205

204206
execution_context = self._dialect.execution_ctx_cls()
205207
execution_context.dialect = self._dialect

databases/backends/mysql.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,9 @@ def transaction(self) -> TransactionBackend:
189189
def _compile(
190190
self, query: ClauseElement
191191
) -> typing.Tuple[str, dict, CompilationContext]:
192-
compiled = query.compile(dialect=self._dialect)
192+
compiled = query.compile(
193+
dialect=self._dialect, compile_kwargs={"render_postcompile": True}
194+
)
193195

194196
execution_context = self._dialect.execution_ctx_cls()
195197
execution_context.dialect = self._dialect

databases/backends/postgres.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,9 @@ def transaction(self) -> TransactionBackend:
231231
return PostgresTransaction(connection=self)
232232

233233
def _compile(self, query: ClauseElement) -> typing.Tuple[str, list, tuple]:
234-
compiled = query.compile(dialect=self._dialect)
234+
compiled = query.compile(
235+
dialect=self._dialect, compile_kwargs={"render_postcompile": True}
236+
)
235237

236238
if not isinstance(query, DDLElement):
237239
compiled_params = sorted(compiled.params.items())

databases/backends/sqlite.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,9 @@ def transaction(self) -> TransactionBackend:
157157
def _compile(
158158
self, query: ClauseElement
159159
) -> typing.Tuple[str, list, CompilationContext]:
160-
compiled = query.compile(dialect=self._dialect)
160+
compiled = query.compile(
161+
dialect=self._dialect, compile_kwargs={"render_postcompile": True}
162+
)
161163

162164
execution_context = self._dialect.execution_ctx_cls()
163165
execution_context.dialect = self._dialect

tests/test_databases.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1061,3 +1061,20 @@ async def test_posgres_interface(database_url):
10611061
):
10621062
# avoid checking `id` at index 0 since it may change depending on the launched tests
10631063
assert list(result.values())[1:] == ["example1", True]
1064+
1065+
1066+
@pytest.mark.parametrize("database_url", DATABASE_URLS)
1067+
@async_adapter
1068+
async def test_postcompile_queries(database_url):
1069+
"""
1070+
Since SQLAlchemy 1.4, IN operators needs to do render_postcompile
1071+
"""
1072+
async with Database(database_url) as database:
1073+
query = notes.insert()
1074+
values = {"text": "example1", "completed": True}
1075+
await database.execute(query, values)
1076+
1077+
query = notes.select().where(notes.c.id.in_([2, 3]))
1078+
results = await database.fetch_all(query=query)
1079+
1080+
assert len(results) == 0

0 commit comments

Comments
 (0)