为 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无法自动处理类型问题。
🏷️

标签

➡️

继续阅读