Skip to content

Bug: TypeError in sqlalchemy_firebird when using first() after upgrading to SQLAlchemy 2.0.40 #74

@YANGSROOT

Description

@YANGSROOT

The following is the error message:
Traceback (most recent call last):
File "D:\e5001\backend\venv\Lib\site-packages\uvicorn\protocols\http\h11_impl.py", line 403, in run_asgi
result = await app( # type: ignore[func-returns-value]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\e5001\backend\venv\Lib\site-packages\uvicorn\middleware\proxy_headers.py", line 60, in call
return await self.app(scope, receive, send)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\e5001\backend\venv\Lib\site-packages\fastapi\applications.py", line 1054, in call
await super().call(scope, receive, send)
File "D:\e5001\backend\venv\Lib\site-packages\starlette\applications.py", line 112, in call
await self.middleware_stack(scope, receive, send)
File "D:\e5001\backend\venv\Lib\site-packages\starlette\middleware\errors.py", line 187, in call
raise exc
File "D:\e5001\backend\venv\Lib\site-packages\starlette\middleware\errors.py", line 165, in call
await self.app(scope, receive, _send)
File "D:\e5001\backend\venv\Lib\site-packages\starlette\middleware\cors.py", line 93, in call
await self.simple_response(scope, receive, send, request_headers=headers)
File "D:\e5001\backend\venv\Lib\site-packages\starlette\middleware\cors.py", line 144, in simple_response
await self.app(scope, receive, send)
File "D:\e5001\backend\venv\Lib\site-packages\starlette\middleware\exceptions.py", line 62, in call
await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
File "D:\e5001\backend\venv\Lib\site-packages\starlette_exception_handler.py", line 53, in wrapped_app
raise exc
File "D:\e5001\backend\venv\Lib\site-packages\starlette_exception_handler.py", line 42, in wrapped_app
await app(scope, receive, sender)
File "D:\e5001\backend\venv\Lib\site-packages\starlette\routing.py", line 714, in call
await self.middleware_stack(scope, receive, send)
File "D:\e5001\backend\venv\Lib\site-packages\starlette\routing.py", line 734, in app
await route.handle(scope, receive, send)
File "D:\e5001\backend\venv\Lib\site-packages\starlette\routing.py", line 288, in handle
await self.app(scope, receive, send)
File "D:\e5001\backend\venv\Lib\site-packages\starlette\routing.py", line 76, in app
await wrap_app_handling_exceptions(app, request)(scope, receive, send)
File "D:\e5001\backend\venv\Lib\site-packages\starlette_exception_handler.py", line 53, in wrapped_app
raise exc
File "D:\e5001\backend\venv\Lib\site-packages\starlette_exception_handler.py", line 42, in wrapped_app
await app(scope, receive, sender)
File "D:\e5001\backend\venv\Lib\site-packages\starlette\routing.py", line 73, in app
response = await f(request)
^^^^^^^^^^^^^^^^
File "D:\e5001\backend\venv\Lib\site-packages\fastapi\routing.py", line 301, in app
raw_response = await run_endpoint_function(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\e5001\backend\venv\Lib\site-packages\fastapi\routing.py", line 212, in run_endpoint_function
return await dependant.call(**values)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\e5001\backend\app\modules\erp_auth\router.py", line 58, in login
Operator.PW == request.password).first()
^^^^^^^
File "D:\e5001\backend\venv\Lib\site-packages\sqlalchemy\orm\query.py", line 2759, in first
return self.limit(1)._iter().first() # type: ignore
^^^^^^^^^^^^^^^^^^^^^
File "D:\e5001\backend\venv\Lib\site-packages\sqlalchemy\orm\query.py", line 2858, in _iter
result: Union[ScalarResult[_T], Result[_T]] = self.session.execute(
^^^^^^^^^^^^^^^^^^^^^
File "D:\e5001\backend\venv\Lib\site-packages\sqlalchemy\orm\session.py", line 2365, in execute
return self._execute_internal(
^^^^^^^^^^^^^^^^^^^^^^^
File "D:\e5001\backend\venv\Lib\site-packages\sqlalchemy\orm\session.py", line 2251, in _execute_internal
result: Result[Any] = compile_state_cls.orm_execute_statement(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\e5001\backend\venv\Lib\site-packages\sqlalchemy\orm\context.py", line 306, in orm_execute_statement
result = conn.execute(
^^^^^^^^^^^^^
File "D:\e5001\backend\venv\Lib\site-packages\sqlalchemy\engine\base.py", line 1416, in execute
return meth(
^^^^^
File "D:\e5001\backend\venv\Lib\site-packages\sqlalchemy\sql\elements.py", line 523, in _execute_on_connection
return connection._execute_clauseelement(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\e5001\backend\venv\Lib\site-packages\sqlalchemy\engine\base.py", line 1630, in _execute_clauseelement
compiled_sql, extracted_params, cache_hit = elem._compile_w_cache(
^^^^^^^^^^^^^^^^^^^^^^
File "D:\e5001\backend\venv\Lib\site-packages\sqlalchemy\sql\elements.py", line 711, in _compile_w_cache
compiled_sql = self._compiler(
^^^^^^^^^^^^^^^
File "D:\e5001\backend\venv\Lib\site-packages\sqlalchemy\sql\elements.py", line 320, in _compiler
return dialect.statement_compiler(dialect, self, **kw)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\e5001\backend\venv\Lib\site-packages\sqlalchemy\sql\compiler.py", line 1446, in init
Compiled.init(self, dialect, statement, **kwargs)
File "D:\e5001\backend\venv\Lib\site-packages\sqlalchemy\sql\compiler.py", line 886, in init
self.string = self.process(self.statement, **compile_kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\e5001\backend\venv\Lib\site-packages\sqlalchemy\sql\compiler.py", line 932, in process
return obj._compiler_dispatch(self, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\e5001\backend\venv\Lib\site-packages\sqlalchemy\sql\visitors.py", line 141, in _compiler_dispatch
return meth(self, **kw) # type: ignore # noqa: E501
^^^^^^^^^^^^^^^^
File "D:\e5001\backend\venv\Lib\site-packages\sqlalchemy\sql\compiler.py", line 4873, in visit_select
text = self._compose_select_body(
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\e5001\backend\venv\Lib\site-packages\sqlalchemy\sql\compiler.py", line 5035, in _compose_select_body
t = self._generate_delimited_and_list(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\e5001\backend\venv\Lib\site-packages\sqlalchemy\sql\compiler.py", line 2787, in _generate_delimited_and_list
return separator.join(
^^^^^^^^^^^^^^^
File "D:\e5001\backend\venv\Lib\site-packages\sqlalchemy\sql\compiler.py", line 2789, in
for s in (c._compiler_dispatch(self, **kw) for c in clauses)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\e5001\backend\venv\Lib\site-packages\sqlalchemy\sql\compiler.py", line 2789, in
for s in (c._compiler_dispatch(self, **kw) for c in clauses)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\e5001\backend\venv\Lib\site-packages\sqlalchemy\sql\visitors.py", line 141, in _compiler_dispatch
return meth(self, **kw) # type: ignore # noqa: E501
^^^^^^^^^^^^^^^^
File "D:\e5001\backend\venv\Lib\site-packages\sqlalchemy\sql\compiler.py", line 3429, in visit_binary
return self._generate_generic_binary(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\e5001\backend\venv\Lib\site-packages\sqlalchemy\sql\compiler.py", line 3488, in _generate_generic_binary
+ binary.right._compiler_dispatch(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\e5001\backend\venv\Lib\site-packages\sqlalchemy\sql\visitors.py", line 141, in compiler_dispatch
return meth(self, **kw) # type: ignore # noqa: E501
^^^^^^^^^^^^^^^^
File "D:\e5001\backend\venv\Lib\site-packages\sqlalchemy\sql\compiler.py", line 3823, in visit_bindparam
ret = self.bindparam_string(
^^^^^^^^^^^^^^^^^^^^^^
File "D:\e5001\backend\venv\Lib\site-packages\sqlalchemy\sql\compiler.py", line 4011, in bindparam_string
ret = self.render_bind_cast(bindparam_type, type_impl, ret)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\e5001\backend\venv\Lib\site-packages\sqlalchemy_firebird\base.py", line 39, in render_bind_cast
self.dialect.type_compiler_instance.process(
File "D:\e5001\backend\venv\Lib\site-packages\sqlalchemy\sql\compiler.py", line 977, in process
return type
._compiler_dispatch(self, **kw)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\e5001\backend\venv\Lib\site-packages\sqlalchemy\sql\visitors.py", line 141, in compiler_dispatch
return meth(self, **kw) # type: ignore # noqa: E501
^^^^^^^^^^^^^^^^
File "D:\e5001\backend\venv\Lib\site-packages\sqlalchemy\sql\compiler.py", line 7338, in visit_string
return self.visit_VARCHAR(type
, **kw)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\e5001\backend\venv\Lib\site-packages\sqlalchemy\sql\compiler.py", line 7264, in visit_VARCHAR
return self._render_string_type(
^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\e5001\backend\venv\Lib\site-packages\sqlalchemy_firebird\base.py", line 425, in _render_string_type
text = text + (length and "(%d)" % length or "")
~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
TypeError: unsupported operand type(s) for +: 'int' and 'str'

Here is the code I wrote:
db.query(Operator).filter(
Operator.OPERATOR_NO == request.operator_id,
Operator.PW == request.password).first()

python version:Python312
sqlalchemy-firebird version:2.1

When I use SQL Alchemy version 2.0.39, there will be no error messages

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions