预期类型 'Mapped[bool | None]',取而代之的是'bool' - IDE Warning transition to SQLAlchemy 2.0 Declarative style

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

我正在努力将项目的数据库部分从 SQLAlchemy 1.4 过渡到 2.0。我正在尝试使用新版本中推荐的 Mapped 类和 mapped_column 格式(而不是 Column() 格式......虽然我意识到这应该在可预见的未来继续工作)。但是,当我这样做时,我在编辑这些值的类方法中收到 IDE 警告。

这里是一些简化的代码,显示了 w:arning

from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
from typing import Optional


class SQLAlchemyBase(DeclarativeBase):
    pass


class TestModel(SQLAlchemyBase):
    __tablename__ = "my_table"

    id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True)
    my_string: Mapped[str]
    yes_no: Mapped[Optional[bool]]

    def my_method(self):
        self.yes_no = True
        self.my_string = "abc"

我在 IDE (PyCharm 2023.1.1) 中收到的错误是针对最后两行的,它们是:

self.yes_no = True
Expected type 'Mapped[bool | None]', got 'bool' instead

self.my_string = "abc"
Expected type 'Mapped[str]', got 'str' instead

我理解为什么会出现警告,因为 Mapped[bool] 显然不是 bool,但这不是预期的行为。另外,一切正常,所以也许我只是强迫症。我也知道有几种方法可以抑制警告。然而,我收到警告的事实让我觉得我做错了什么最终会回来咬我。

我的映射不正确吗?我应该使用

self.yes_no = Mapped[true]
吗,它有效,但看起来很愚蠢和过度。将方法放在这些基于 DeclarativeBase 的类中只是一种不好的形式吗?

我已经搜索了 SQLAlchemy 文档,但是他们的示例都没有包含方法,所以我一直找不到答案。

python sqlalchemy pycharm warnings
© www.soinside.com 2019 - 2024. All rights reserved.