英文:
SQLAlchemy 2.0 ORM filter show wrong type in Pycharm
问题
我正在使用Pycharm开发一个使用SQLAlchemy 2.0的应用程序。
当我尝试使用ORM方法查询某个表时,Pycharm总是显示过滤查询中的类型错误。
例如,在下面的代码片段中:
with Session(engine) as session:
session.scalars(select(Albums.AlbumId).where(Albums.Id > user_last_sync_id))
^^^ 显示错误类型
会得到以下消息:
期望类型为'ColumnElement[bool] | _HasClauseElement | SQLCoreOperations[bool] | ExpressionElementRole[bool] | () -> ColumnElement[bool] | LambdaElement',但实际得到的是'bool'
尽管它指示了类型错误,但脚本仍然会执行(并获取正确的数据),而不显示任何错误消息。
在代码中可能导致此问题的原因是什么?有没有办法使代码更加“正确”,以便Pycharm不显示类型错误?
英文:
I'm using Pycharm to develop an app with SQLAlchemy 2.0.
When I attempt to query some table using ORM approach. Pycharm always display type error in the filter query.
For example, in the code snippet below:
with Session(engine) as session:
session.scalars(select(Albums.AlbumId).where(Albums.Id > user_last_sync_id))
^^^ Show wrong type
Get the following message
Expected type 'ColumnElement[bool] | _HasClauseElement | SQLCoreOperations[bool] | ExpressionElementRole[bool] | () -> ColumnElement[bool] | LambdaElement',, got 'bool' instead
Even though it indicates a type error, but scripts still be executed (And get correct data) without showing any error messages.
What could potentially be causing this issue in the code? Is there a way to make code more "correct" to let Pycharm not to display type error?
答案1
得分: 3
PyCharm假设形式为a > b
的表达式在没有其他类型信息可用时会求值为bool
。很可能,SQLAlchemy没有提供足够丰富的类型提示和/或存根文件,以使PyCharm能够正确推断该表达式的类型。
要解决这个警告,你可以使用typing.cast
来告诉PyCharm表达式的真实类型:
.where(
cast("ColumnElement[bool]", Albums.Id > user_last_sync_id)
)
另外,你可以通过在行末添加# type: ignore
来忽略该警告。
英文:
PyCharm assumes that expressions of the form a > b
evaluate to bool
when no other type information is available. Most likely, SQLAlchemy isn't providing rich enough type hints and/or stubfiles for PyCharm to correctly infer the type of that expression.
To resolve that warning, you can inform PyCharm about the true type of the expression using typing.cast
:
.where(
cast("ColumnElement[bool]", Albums.Id > user_last_sync_id)
)
Alternatively, you can suppress the warning by adding # type: ignore
to the end of the line.
答案2
得分: 1
我正在查看这个确切的问题,并遇到了这个问题。感谢您的报告。@Brian61354270是正确的,如果您安装了插件,pycharm和mypy会对等式的类型进行投诉。
我刚刚尝试安装了存根,警告就消失了。
pip install sqlalchemy-stubs
英文:
I was looking to this exact problem and i came across this issue. Thanks for reporting it. @Brian61354270 is right, pycharm and mypy (if you have the plugin) will complain about type of the equal expression.
I just tried to install the stubs and the warning is just gone away
pip install sqlalchemy-stubs
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论