【问题标题】:Avoid models replication between app and DB避免应用程序和数据库之间的模型复制
【发布时间】:2022-11-11 04:24:10
【问题描述】:
  • 我有一个带有数据库的应用程序。
  • 我使用 SQLAlchemy 作为 orm。
  • 我已经“在纸上”绘制了我的图表,其中包含我的应用程序类之间的属性和关系。

现在我想用属性、方法和关系在我的应用程序的类中编写这个图。 但我也希望这些反映到数据库中。

在我为此找到的每个example 中,人们总是写两个模块:一个为数据库模式(例如在 SQLALchemy 中)和一个用于“应用架构”(在纯 python 或使用 pydantic 中),在两者之间复制名称和属性。

我不喜欢重复的结构,因为不一次编写相同的东西会使您在维护代码时遇到错误和困难。

有没有办法避免模​​型复制?如果没有,您能否帮助我理解为什么有必要为相同的逻辑编写两个不同但几乎一致的模式?

谢谢

【问题讨论】:

    标签: python postgresql sqlalchemy pydantic


    【解决方案1】:

    原因是有争议的,主要是历史性的。 FastAPI 使用 Pydantic 模型来定义 API 模式。 SQLAlchemy 是一个 DB 抽象和 ORM。后者也更老。它们有不同的用途。例如,仅仅因为您需要 ORM,并不意味着您有兴趣编写 Web API。

    碰巧的是,随着 CRUD API 范式的流行,人们开始越来越多地缩小两者之间的差距; API 和 DB 模式开始越来越多地相互映射。

    到目前为止,您并不是唯一遇到这个几乎逐字重复类定义的问题的人,因为一个是 DB 模型,另一个是 API 模型。

    幸运的是,开发 FastAPI 的 same guy 也开始了一个新项目,旨在缩小这一差距并消除重复定义的需要。它被称为SQLModel,我建议你检查一下。

    这只是一个观点:我认为这是朝着正确方向迈出的一大步,并且有很大的潜力,但它仍处于早期阶段,可能并不完全稳定,而且其功能远非详尽无遗。它目前还受到这样一个事实的困扰,即塞巴斯蒂安似乎难以跟上项目的维护,可能是由于时间限制。但我仍在关注它。 (我自己在那里有一些 PR,希望被合并。)

    【讨论】:

      猜你喜欢
      • 2012-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-22
      • 1970-01-01
      • 1970-01-01
      • 2010-10-02
      相关资源
      最近更新 更多