dan*_*d22 7 python warnings sqlalchemy pycharm
我正在努力将项目的数据库部分从 SQLAlchemy 1.4 过渡到 2.0。我正在尝试使用新版本中推荐的 Mapped 类和mapped_column 格式(而不是 Column() 格式......尽管我意识到这应该在可预见的未来继续有效)。但是,当我执行此操作时,我会在编辑这些值的类方法中收到 IDE 警告。
这是一些显示警告的简化代码:
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"
Run Code Online (Sandbox Code Playgroud)
我在 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 文档,但它们的示例均不包含方法,因此我无法找到答案。