【问题标题】:Is there any python ORM, that provide "clear" model architecture?是否有任何提供“清晰”模型架构的python ORM?
【发布时间】:2020-10-27 10:04:46
【问题描述】:

我在 PHP 和 c# 开发方面有丰富的经验,我正在研究学习 Python。我想练习数据存储和检索,当我看到大多数 python ORM 如何处理模型层时,我哭了。

在 python ORMs 中,模型实体做了很多工作似乎很正常——它不仅是一个数据容器(我认为它应该是这样的),而且对于某些库来说,它也持有数据库连接(@ 987654321@ - 是的,您可以使用没有 db 的实体并稍后绑定它,但您仍然必须使用该实体进行数据检索...)或具有一些它们继承的公共元数据对象(declarative_base in SQLalchemy)。在某些库中,实体类用于数据retrievalfilteringstoragedeletion。类似的概念可以在其他 ORM 库中看到,例如 django-ormtortoise-ormpony-orm

这赋予了实体类过多的责任,并将实体(以及整个数据服务层)与特定的库实现绑定在一起。它还打破了单一职责原则,概念分离,使测试变得更加困难,使依赖注入变得非常不可用,可能还有许多我现在想不到的事情。即使提到的库通常很好并且可以满足您的所有需求,但我无法克服这个基本的东西......

我期待看到一些负责数据存储和检索的管理器/数据服务层。实体将是接近普通的对象,对数据库层一无所知(如sqlite-netdoctrine 实体)。 python中是否存在类似的东西?为什么这种(​​反)模式在 python 库中如此普遍?

谢谢

【问题讨论】:

    标签: python python-3.x orm


    【解决方案1】:

    peewee 的作者在这里。正如您所注意到的,Peewee 有一个查询构建器 API,它不耦合到底层数据库连接,但这只是构建更紧密耦合的模型层的基础。据我所知,这是 99.99% 的人使用的。对我来说,我会看:我想在这里做什么,以及如何以最少的样板或配置尽可能简单地完成它。这遵循 80-20 规则(尽管对于 Peewee 用户来说它可能更接近 99-1),其中公开的 API 与用户尝试执行的操作完全一致。从我收到的反馈来看,似乎其他人也有类似的目标,并且喜欢 Peewee 的简单性。

    【讨论】:

    • 感谢您的回答。我知道它可能对大多数情况(用户)有效(并且显然有效)。但对我来说,耦合逻辑和数据容器似乎不是一种好的工程技术(由于我在问题中描述的原因)。我确实检查了查询生成器,它似乎仍然使用模型实体进行基本的 CRUD 操作。我想知道为什么这是 Python 中如此常见的方式,而我想不出任何不分离这些层的成熟 c#(或 php)ORM ...
    • 我认为当人们想要一个服务层时,他们倾向于在 ORM 提供的模型/API 之上构建它。通过这种方式,他们将模型视为非常薄的结构类型,并具有方便的存储/检索方法。
    • 这就是我最终所做的——使用 peewee 并在 peewee 的模型和我的普通对象模型之间进行转换。感谢您的回复和图书馆,除了我对这个服务层的问题,我发现它非常好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-06
    • 1970-01-01
    • 2013-09-21
    • 2010-10-26
    • 2011-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多