diff --git a/databases/core.py b/databases/core.py index b3c2b440..20d9a0b5 100644 --- a/databases/core.py +++ b/databases/core.py @@ -331,6 +331,8 @@ def _build_query( return query.bindparams(**values) if values is not None else query elif values: + if query.is_selectable: + return query.params(**values) return query.values(**values) return query diff --git a/tests/test_databases.py b/tests/test_databases.py index 8c99f547..a334f865 100644 --- a/tests/test_databases.py +++ b/tests/test_databases.py @@ -143,6 +143,16 @@ def run_sync(*args, **kwargs): return run_sync +@pytest.mark.parametrize("database_url", DATABASE_URLS) +@async_adapter +async def test_selectable_queries_with_params(database_url): + async with Database(database_url) as database: + async with database.transaction(force_rollback=True): + param = sqlalchemy.bindparam('price') + query = sqlalchemy.select([prices]).where(prices.c.price < param) + rows = await database.fetch_all(query=query, values={'price': 10}) + list(rows) + @pytest.mark.parametrize("database_url", DATABASE_URLS) @mysql_versions