SQLAlchemy-Marshmallow查询和序列化为JSON

时间:2016-07-13 02:38:31

标签: python json sqlalchemy flask-sqlalchemy marshmallow

我对此有些新意,所以如果有人可以帮助我,那就太棒了。

所以我在SQLAlchemy中为我正在处理的Flask应用程序设置了一些模型。当我构建应用程序时,我填充了db(当前是SQLite)的一些虚假数据,我很惊讶我的一个调用速度有多慢。

我在DB中有一个名为Menu的表。菜单有一个孩子,部分,其中有一个孩子,物品。像这样:

  • 菜单
      • 产品

我正在查询的对象是1个菜单,它有4个部分,每个部分有10个项目。

在我的Flask路线中,我使用Menu.query.get(id)查询数据库,并使用marshmallow将其序列化为JSON。

整件事需要250毫秒才可以在我的本地机器上返回。

所以我的问题是: 我担心大约250毫秒我是傻瓜? 缓慢的罪魁祸首是什么?   - 糟糕的架构设计?   - SQLite /使用SQL Db?   - 别的什么?

非常感谢任何帮助。

此外。我最初有两个更深层次(项目有选项可供选择),但它需要大约一整秒才能完成,所以当用户请求特定项目时,我将它们移动到一个单独的端点。

1 个答案:

答案 0 :(得分:2)

我同意250ms是过分的,因为一切都是本地的。我希望缓慢的原因是正在执行多个SQL查询以构建JSON。

在SQLAlchemy配置上设置SQLALCHEMY_ECHO = True将显示正在生成的SQL查询并确认。

您还没有提供数据库模型,但您可能会发现您的关系正在延迟加载,因此正在为树中的每个对象创建一个新的SQL查询。您可以在SQLAlchemy文档的Relationship Loading Techniques部分中找到更多信息。

在子关系上设置lazy='joined'(即菜单 - >部分和部分 - >项目)将导致使用JOIN而不是默认的SELECT急切加载子关系。