为 SQLAlchemy Model 添加 type hint 和 type check
💡
原文中文,约2800字,阅读约需7分钟。
📝
内容提要
本文介绍了一种解决SQLAlchemy Model/ORM的typing问题的解决方案。通过使用Python的PEP 681中的dataclass_transform装饰器,可以将第三方类标注为类似于dataclass的功能。这个装饰器提供了大部分所需的功能,但是会导致类型检查器认为字段是可选的。可以通过编写一个dummy __init__方法来解决这个问题。可以直接在SQLAlchemy的Base类上使用这个装饰器,以避免重复编写Model类。
🎯
关键要点
- 本文介绍了一种解决SQLAlchemy Model/ORM的typing问题的解决方案。
- 使用Python的PEP 681中的dataclass_transform装饰器,可以将第三方类标注为类似于dataclass的功能。
- 该装饰器提供了大部分所需的功能,但会导致类型检查器认为字段是可选的。
- 可以通过编写一个dummy __init__方法来解决字段可选性的问题。
- 可以直接在SQLAlchemy的Base类上使用这个装饰器,以避免重复编写Model类。
- 对于SQLAlchemy 1.4及以下版本,可以使用sqlalchemy-stub,2.0及以上版本则需要其他解决方案。
- PEP 681为typing模块提供了dataclass_transform装饰器,支持第三方库标注类的行为。
- 该装饰器支持自动生成__init__方法、比较方法和字段属性描述等功能。
- 在使用SQLAlchemy ORM Model时,手写原始SQL无法自动处理类型问题。
🏷️
标签
➡️