-
Notifications
You must be signed in to change notification settings - Fork 4
Closed
Description
Given a simple select that has a limit/offset clause, parameter substitution does not occur for the SQL during execution so it fails to execute.
import sqlalchemy as sa
metadata = sa.MetaData()
tbl = sa.Table(
"test-table",
metadata,
sa.Column("Col1", sa.DECIMAL(38, 10)),
sa.Column("Col2", sa.VARCHAR()),
sa.Column("Col3", sa.VARCHAR()),
schema="test-schema",
)
select_query = sa.select(tbl).limit(1000).offset(0)
engine = sa.create_engine("databend://root:@plaid-databend-query:8000?sslmode=disable")
# print(select_query.compile(engine, compile_kwargs={"literal_binds": True, "render_postcompile": True}))
with engine.connect() as conn:
conn.execute(select_query).fetchall()
Actual SQL generated by SQLAlchemy normal compilation (although incorrect values for limit/offset)
SELECT "Col1", "Col2", "Col3"
FROM "test-schema"."test-table"
LIMIT 0,0
Traceback (most recent call last):
File "/home/plaid/src/plaid/plaid/temp/patbuxton/databend_sql.py", line 22, in <module>
conn.execute(select_query).fetchall()
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/sqlalchemy/engine/base.py", line 1385, in execute
return meth(self, multiparams, params, _EMPTY_EXECUTION_OPTS)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/sqlalchemy/sql/elements.py", line 334, in _execute_on_connection
return connection._execute_clauseelement(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/sqlalchemy/engine/base.py", line 1577, in _execute_clauseelement
ret = self._execute_context(
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/sqlalchemy/engine/base.py", line 1953, in _execute_context
self._handle_dbapi_exception(
File "/usr/local/lib/python3.11/site-packages/sqlalchemy/engine/base.py", line 2138, in _handle_dbapi_exception
util.raise_(exc_info[1], with_traceback=exc_info[2])
File "/usr/local/lib/python3.11/site-packages/sqlalchemy/util/compat.py", line 211, in raise_
raise exception
File "/usr/local/lib/python3.11/site-packages/sqlalchemy/engine/base.py", line 1910, in _execute_context
self.dialect.do_execute(
File "/usr/local/lib/python3.11/site-packages/sqlalchemy/engine/default.py", line 736, in do_execute
cursor.execute(statement, parameters)
File "/usr/local/lib/python3.11/site-packages/databend_sqlalchemy/connector.py", line 182, in execute
rows = self._db.query_iter(operation)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Exception: APIError: ResponseError with 1005: error:
--> SQL:3:10
|
1 | SELECT "Col1", "Col2", "Col3"
| ------ while parsing `SELECT ...`
2 | FROM "test-schema"."test-table"
3 | LIMIT 0,%(param_2)s
| ^
| |
| missing lhs or rhs for the binary operator
| while parsing expression
Metadata
Metadata
Assignees
Labels
No labels