【问题标题】:Best way to handle switching between multiple, large amount of databases in Flask with SQLAlchemy and Postgres使用 SQLAlchemy 和 Postgres 在 Flask 中处理多个大量数据库之间切换的最佳方法
【发布时间】:2015-08-24 21:12:57
【问题描述】:

我有一个大型应用程序,它有多个数据库,具有相同的架构。什么是实现的最佳解决方案,所以我可以让用户动态地在数据库之间切换以进行查询。为每个数据库创建一个引擎不是解决方案,因为我收到“连接太多”的 postgres 错误。这里的主要问题是创建了太多引擎,那么有没有办法在使用后删除引擎?数据库的数量将是数千个,同时拥有数百个用户。

谢谢。

编辑:这是连接代码

engine = create_engine(datbase_uri)  
session = sessionmaker(bind=engine)

^每次需要连接到特定数据库时都会执行此操作。并且是动态完成的(当用户在应用程序中请求时)。问题是多次执行此操作时,会出现“连接过多”错误。

关闭引擎的最佳方法是什么?

【问题讨论】:

  • 使用多个 Postgres 模式(即 Postgres 中的命名空间功能,而不是表模式)并让您的查询全部完全限定模式,或者动态设置 search_path。
  • 目前的实现使用了多个数据库同一个schema,有没有基于此的解决方案?
  • 添加的代码片段。
  • "每次需要连接到特定数据库时都会这样做"
  • 这可能是问题的解决方案。

标签: python database postgresql flask sqlalchemy


【解决方案1】:

我们之前也遇到过同样的问题。在我们的多租户应用程序中,我们使用set search_path to <schemaName> psql query 来服务来自特定客户端的 DML。你可以查看 SQLAlchemy 的详细实现here

关于too many connections 问题最好使用连接池。 SQLAlchemy 的答案是here

【讨论】:

  • 目前的实现使用了多个数据库同一个schema,有没有基于此的解决方案?
  • 除非您有正当理由拥有多个数据库,每个数据库都有一个架构,否则我会使用一个数据库 - postgres 中的多个架构。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-11
  • 2018-02-18
  • 2023-03-21
  • 1970-01-01
  • 2018-08-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多