使用 SQLAlchemy ORM、Pydantic 和 Alembic:每个模型更改都需要反映在三个不同的位置,违反了 DRY?

Rog*_*int 6 postgresql orm sqlalchemy alembic pydantic

所以我正在学习FastAPI并希望获得更多关系数据库的经验。我正在使用 SQLAlchemy ORM、Pydantic 和 Alembic。数据库是Postgres。然而,我遇到的一件事是,当我想向表中添加单个列时,我需要更改模型、模式和 alembic 以反映此更改。这不是对 DRY 的巨大违反,容易出错,而且从长远来看很难维护吗?

Dan*_*erg 3

查看SQLModel。它试图解决这个确切的问题。您无需定义数据库模型 (SQLAlchemy) 和相应的 Pydantic 模型,只需定义一个SQLModel将两者结合起来的模型。

它不会改变您需要验证 Alembic 迁移是否按预期工作的事实。

该项目仍处于早期阶段,但我发现它非常有前途。

一般来说,在开发 API 时,我认为定义两次架构没有任何好处。然而,当您必须重复执行模式中的每个更改时,明显的缺点是使整个应用程序更容易出错。

使用SQLModel,您可能会看到代码行数大幅减少,除非您有非常特殊的要求(例如外来类型、多层验证/转换、高度复杂/嵌套关系)。