如何动态创建 SQLAlchemy 引擎并在 Flask 中的请求之间使用它?

时间:2021-07-12 10:32:31

标签: flask sqlalchemy

我正在使用 Flask 构建一个 API,它允许用户一次查询多个数据库。它应该是这样工作的:

  1. 用户首先通过提交 URI 来“连接”到他们的数据库。前端将通过请求将这些 URI 发送到后端。
  2. 然后用户可以与数据库进行交互。前端会将用户的操作转换为 SQL 查询,并将它们发送到后端以在他们的数据库上执行。

我目前的计划是实现一个 API 视图来处理创建 SQLAlchemy 引擎和一个不同的 API 视图来处理查询(即使用 SQLAlchemy 引擎执行原始 SQL)。但我不确定如何在不同的视图和请求之间共享 SQLAlchemy 引擎。

1 个答案:

答案 0 :(得分:1)

Web 应用程序可以在不同的进程甚至不同的机器中运行。因此,一旦用户注册了他们的引擎,您将创建一个“全局变量”并感到高兴的想法通常是错误的。它可能在某些情况下有效,但不是必须的。即使您有 1 个进程部署,也可能会发生该进程重新启动并丢失运行时数据的情况。那现在怎么办?

主要问题是:您想在哪里存储引擎的 URI?一种可能性(我建议从那一种开始,因为您已经熟悉数据库)是将数据存储在某个主应用程序的数据库中。 或者,如果您想学习新东西,请尝试使用 memcached 或 redis。

然后您可以使用某种应用程序级注册表(或配置 - 不确定它是如何在flask中调用的,但实际上它是一个全局对象),它可以包含构造的引擎。如果引擎不在注册表中,请添加它。如果是,就使用它。