如何解决如何使用 sqlalchemy 枚举解决 mypy 错误?
mypy 报错如下代码:
import enum
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column,Enum
Base = declarative_base()
class MyEnum(enum.Enum):
A = 1
B = 2
class MyTable(Base):
__tablename__ = 'my_table'
col = Column(Enum(MyEnum),nullable=False)
c = MyTable(col=MyEnum.A)
以下是错误:
a.py:16: 错误:“MyTable”的“col”类型不兼容(得到 “MyEnum”,应为“str”)
如何在不添加“类型:忽略”的情况下消除此错误?我也可以用 MyEnum.A.name 替换 MyEnum.A 以使错误消失。但这看起来并不干净,在 sqlalchemy 文档中也不建议这样做。
解决方法
由于 sqlalchemy
不使用类型注释,您必须自己在脚本中引入它们。动态创建的 Base
类的类型为 DeclarativeMeta
。如果您键入 annotate 变量 Base,mypy 将不再显示错误。
from sqlalchemy.orm.decl_api import DeclarativeMeta
Base: DeclarativeMeta = declarative_base()
现在 Base 变量已正确类型注释。我认为 DeclarativeMeta 类不会在 API 中公开,所以我不确定这个解决方案的可持续性。
然而,这并不奇怪,人们可能会问在动态类型语言中强制静态类型检查的目的是什么。但那是另一天。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。