通常,我使用 ASP .Net Core 开发 Web 应用程序,但最近我必须使用 ORM 和 sqlalchemy 创建一个 python Flask 应用程序。首先,一切都进展顺利。当我尝试清理设计并解耦包以便在单元测试中进行测试时,麻烦就开始了。
我遇到了一个问题,模型类需要从
db.Model
派生,其中 db
已经是 SQLAlchemy
类的对象,并且也与 Flask 应用程序对象绑定。所以,这一切基本上都变成了一个大泥球。
class User(db.Model):
pass
作为一名 C# 开发人员,我发现这非常奇怪。如何将数据模型与 Flask 和 sqlalchemy 解耦以进行独立测试?有没有例如一种以编程方式注册 SQLAlchemy 模型类的方法?
我认为
python_user
的建议可能是你想要的东西的开始,但更具体地说是命令映射。这可以让您将表与类完全分开。
唯一的问题是,如果您想使用添加到声明式中的所有最新打字功能,那么这是行不通的。
话虽如此,在使用 sqlalchemy 一段时间之后,我也会避免将几乎任何逻辑放入数据库模型中。我只是用它们来描述数据成员和关系。然后将所有逻辑放入一些外部服务中。这通常会让我的测试变得更容易。