gpt4 book ai didi

python - 如何使用 sqlalchemy 枚举解决 mypy 错误?

转载 作者:行者123 更新时间:2023-12-04 13:29:12 25 4
gpt4 key购买 nike

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: error: Incompatible type for "col" of "MyTable" (got"MyEnum", expected "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 中公开,所以我不确定这个解决方案的可持续性。
然而,这并不奇怪,人们可能会问在动态类型语言中强制静态类型检查的目的是什么。但那是另一天。

关于python - 如何使用 sqlalchemy 枚举解决 mypy 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66134021/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com