如何使用SQLAlchemy无缝访问多个数据库?

AME*_*AME 13 python postgresql sqlalchemy

假设我为公司的不同部门创建了一个产品数据库系统.由于各种原因,每个部门都有自己的PostgreSQL数据库实例.数据库的模式是相同的,但是其中的数据不是.对于这些系统中的每一个,存在一个执行某些业务逻辑(不相关)的Python应用程序.每个Python应用程序都通过SQLAlchemy访问其数据库及其数据库.

我想创建一个Supervisior系统,可以访问所有这些数据库中的所有数据(通读功能).

这是我想到的一个例子: 在此输入图像描述

我可以用SQLAlchemy做到这一点吗?如果是这样,那种问题的最佳方法是什么?

Mar*_*ers 14

当然你可以用SQLAlchemy做到这一点.

您需要做的就是创建不同的连接引擎,每个引擎都有自己的会话制作者.SQLAlchemy中的任何内容都不会限制您一次只有一个数据库.

engines = []
sessions = []
for dbconninfo in databases:
    engine = create_engine(dbconninfo)
    engines.append(engine)
    sessions.append(sessionmaker(bind=engine)())
Run Code Online (Sandbox Code Playgroud)

您可以使用每个会话来运行查询,将结果对象附加到生成它们的会话,以便更改流回到正确的数据库.详细研究会话文档,看看如果要将对象从一个会话合并到另一个会话中会发生什么.

  • @AME:只要你把结果分开; 不要尝试将结果从一个会话添加到另一个会话. (3认同)