【问题标题】:Buiding a "pseudo-model" out of a query with sqlalchemy?使用 sqlalchemy 从查询中构建“伪模型”?
【发布时间】:2020-12-01 01:09:15
【问题描述】:

所以我已经有一个以特定方式定义的数据库,并且正在围绕它构建一个 JSON:API API,可能使用Flask-REST-JSONAPI

我遇到的问题是 API 生成的一些端点需要与数据库结构有很大不同,我不想为大量相同的数据构建全新的表,因为它非常动态且不断变化.

我可以在 sqlalchemy 中构建一个复杂的查询,然后将其用作模型吗?举个简单的例子,如果我需要加入一些表,然后过滤结果,我可以将其转换为模式模型以与 flask-rest-jsonapi 一起使用吗?

如果不是(或者如果其他解决方案可能更适合),还有什么其他解决方案?

【问题讨论】:

  • 听起来您想创建一个或多个视图? stackoverflow.com/questions/9766940/… 的一些示例
  • @snakecharmerb 视图将不起作用,因为 sqlalchemy 仅支持将它们作为原始表,而不是作为模型。 flask-rest-jsonapi 需要模型。而且你不能只在视图上构建模型,我试过了,这没有意义,因为视图缺少关系信息之类的东西。

标签: postgresql flask sqlalchemy json-api


【解决方案1】:

简答

是的,您可以使用 Flask-REST-JSONAPI。

更长的答案

我认为您对 Flask-REST-JSONAPI 中“数据层”和“逻辑数据提取”之间的区别感到困惑。

在 Flask-REST-JSONAPI 中要做的第一件事是创建一个逻辑数据抽象。这部分 api 描述了 api 暴露的资源的 schema,不是数据架构的精确映射。

  • 因为您可以通过使用 Marshmallow 定义 Schema 来定义您想要的任何关系。很难找到无法用 Marshmallow 实现的用例(尽管可能需要一段时间才能弄清楚......)。
  • 然后将“数据层”和“逻辑抽象层”与资源管理器进行映射。之后,您可以声明您的端点。

Flask-REST-JSONAPI 在其documentation 中很好地解释了这一点(比我在这里做的更好)。


其他选项

你也可以使用:

【讨论】:

  • 是的,我已经明白了。但据我了解,使用 flask-rest-jsonapi 在定义数据层时,您只能选择定义要使用的单个模型(和关系)?因此,即使我已经用棉花糖表达了我想要的东西,如果没有从头开始构建我自己的整个数据层并自己再次实现分页、过滤等,我就无法将它与 flask-rest-jsonapi 一起使用。或者将所有数据库逻辑移动到棉花糖模式中。
  • 是的,所有逻辑都在棉花糖模式中。但也许我不明白你的用例。
  • @above_level_c 你能创建一个小例子,然后简单地连接两个表并与flask-rest-jsonapi一起正常工作吗?
猜你喜欢
  • 2020-07-20
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-27
相关资源
最近更新 更多