SQLAlchemy 2.0 ORM 过滤器在 Pycharm 中显示错误类型

问题描述 投票:0回答:1

我正在使用 Pycharm 和 SQLAlchemy 2.0 开发一个应用程序。

当我尝试使用 ORM 方法查询某个表时。 Pycharm 在过滤查询中总是显示类型错误。

例如,在下面的代码片段中:

    with Session(engine) as session:
        session.scalars(select(Albums.AlbumId).where(Albums.Id > user_last_sync_id))
                                                              ^^^ Show wrong type

收到以下消息

Expected type 'ColumnElement[bool] | _HasClauseElement | SQLCoreOperations[bool] | ExpressionElementRole[bool] | () -> ColumnElement[bool] | LambdaElement',, got 'bool' instead

即使它指示类型错误,但脚本仍然会被执行(并获取正确的数据),而不显示任何错误消息。

什么可能导致代码中出现此问题?有没有办法让代码更“正确”,让Pycharm不显示类型错误?

python python-3.x sqlalchemy pycharm
1个回答
1
投票

PyCharm 假设当没有其他类型信息可用时,

a > b
形式的表达式求值为
bool
。最有可能的是,SQLAlchemy 没有为 PyCharm 提供足够丰富的类型提示和/或存根文件来正确推断该表达式的类型。

要解决该警告,您可以使用

typing.cast
:

告知 PyCharm 表达式的真实类型
.where(
    cast("ColumnElement[bool]", Albums.Id > user_last_sync_id)
)

或者,您可以通过在行尾添加

# type: ignore
来抑制警告。

© www.soinside.com 2019 - 2024. All rights reserved.