我正在使用 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不显示类型错误?
PyCharm 假设当没有其他类型信息可用时,
a > b
形式的表达式求值为 bool
。最有可能的是,SQLAlchemy 没有为 PyCharm 提供足够丰富的类型提示和/或存根文件来正确推断该表达式的类型。
typing.cast
: 告知 PyCharm 表达式的真实类型
.where(
cast("ColumnElement[bool]", Albums.Id > user_last_sync_id)
)
或者,您可以通过在行尾添加
# type: ignore
来抑制警告。