如何输入 SQLAlchemy 查询提示?

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

2024 年更新:sqlalchemy 2.0 具有更好的打字支持

我在 VSCode 中使用 Pylance(由 PyRight 提供类型提示),并具有以下功能:

def sample(session: sqlalchemy.orm.Session) -> sqlalchemy.orm.query.Query:
    return session.query((MyModel)

当查看 Pylance 的类型推断时,该函数实际上具有 Query[Unknown] 的返回类型。当我将类型提示更改为

sqlalchemy.orm.query.Query[MyModel]
时,Pylance 可以正确推断出它的相关类型。这很棒!直到我实际运行代码,并得到
TypeError: 'type' object is not subscriptable

我收到此错误的原因是有道理的,但似乎必须有某种方法可以实现此目的,否则皮兰斯只是在嘲笑我。我发现的一种解决方法(确实有效)是:

def sample(session: sqlalchemy.orm.Session) -> (
    sqlalchemy.orm.query.Query[MyModel]
    if typing.TYPE_CHECKING
    else sqlalchemy.orm.query.Query
):
    return session.query(MyModel)

但这显然很糟糕,我讨厌它。我也许可以制作一个辅助函数来提取它并且更具可读性,但我真的觉得这应该是可能的,而不需要一个糟糕的解决方法!

python types sqlalchemy typing pylance
1个回答
7
投票
def sample(session: sqlalchemy.orm.Session) -> 
"sqlalchemy.orm.query.Query[MyModel]":
    return session.query(MyModel)

实际上工作得很好,但我觉得很愚蠢。如果有其他方法,我很乐意接受这个答案!

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