在Flask和非Flask程序中使用相同的数据库抽象

时间:2013-09-03 12:02:51

标签: python sqlalchemy flask flask-sqlalchemy

基本上,我正在尝试在Flask应用程序(用于REST API)和非Flask API之间共享尽可能多的数据库层代码。

在纯Python API(打算在非Web Python应用程序中导入)和REST API Flask守护程序中使用相同的Flask-SQLAlchemy层是否是一个好主意?

我猜另一种说法,虽然我不确定术语,“我如何在Flask应用程序和单独的Python导入库之间最好地共享数据库模型?”

<小时/> 或者从另一个角度来看,如果您还希望与导入库共享SQL抽象,那么在Flask REST API中使用Flask-SQLAlchemy是否有任何意义。使用普通SQLAlchemy

是否更好?

用例:我们有一个包含许多表的大型数据库,并且希望构建REST API(用于客户访问)和用于访问数据库的Python导入库(用于高性能内部工具),但当然要共享尽可能在它们之间编码。

相关:

1 个答案:

答案 0 :(得分:4)

在Web上下文中使用Flask-SQLAlchemy模型是创建Flask应用程序并调用

的问题
app.test_request_context().push()

这里的重点是您将使用“非网络”库。 如果在您需要使用库时安装整个Flask库不是问题,那么以这种方式使用它就没有任何问题。

如果您计划在库数据访问代码中进行性能改进,例如使用不同的会话,并发等,那么您将修改初始代码,因此这是一个完全不同的场景。在这种情况下,纯SQLAlchemy方法可能会更好,但它实际上取决于两种模式之间的差异。

通常使用模型方法并使用2种不同的ORM模式(Flask-SQLAlchemy包装器模型和纯SQLAlchemy)意味着重复代码。